簡體   English   中英

在靜態類中使用connectionstring時引發Null參考異常

[英]Null Reference Exception Thrown while using connectionstring inside static classes

在我的項目中,我在非靜態類中使用了連接字符串,並且工作正常。 但是現在我正在開發一個在靜態類中使用連接字符串的項目。 在Catch塊下面的代碼中,將引發錯誤,如下所示:

NullReferenceException:對象引用未設置為對象的實例。

如果我將“ Throw”這一行注釋掉,則可以正常工作,但是我想了解我的代碼出了什么問題。

DataAccess類:

public class DataAccess
{
    static string connstr =  ConfigurationManager.ConnectionStrings["DbSystem2018"].ConnectionString;

    public static object GetSingleAnswer(string sql, List<SqlParameter> PList)
    {
        object obj = null;

        SqlConnection conn = new SqlConnection(connstr);

        try
        {
            conn.Open();
            SqlCommand cmd = new SqlCommand(sql, conn);

            if (PList != null)
            {
                foreach (SqlParameter p in PList)
                    cmd.Parameters.Add(p);
            }

            obj = cmd.ExecuteScalar();
        }
        catch (Exception ex)
        {
            throw; // THIS LINE THROW THE NullReferenceException Error
        }
        finally
        {
            conn.Close();
        }

        return obj;
    }
}

問題在於在靜態類中使用靜態連接字符串字段。 因此,有什么方法可以在不使用任何非靜態公共類的情況下解決此問題?

更新:

請注意以下幾點:

  1. 我不想使用非靜態方法,我的問題是如何使用靜態方法解決此問題。

  2. 使用靜態字段時,我們立即對其進行了初始化:

     static string v1 = "hello"; 

    但是,為什么以下代碼的初始化在返回實際的連接字符串之前會拋出null?

     static string connstr = ConfigurationManager.ConnectionStrings["DbSystem2018"].ConnectionString; 

順便說一句,在web.config內部的連接字符串很好。

這個:

System.Configuration.Configuration config = System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration(null);
if (config.ConnectionStrings.ConnectionStrings.Count > 0)
{
    var connString = config.ConnectionStrings.ConnectionStrings[nameOfConnectionString].ToString();
    return connString;
}

是從以下位置復制粘貼: https : //www.codeproject.com/Articles/1012286/Read-web-config-Settings

問題是您正在訪問配置文件。 必須先將這些對象轉換為對象,然后才能使用它們。 這就是上面的代碼所做的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM