【问题标题】:Null Reference Exception Thrown while using connectionstring inside static classes在静态类中使用连接字符串时引发空引用异常
【发布时间】:2018-07-08 18:59:00
【问题描述】:

在我的项目中,我在非静态类中使用了连接字符串,它工作正常。但现在我正在开发一个在静态类中使用连接字符串的项目。在下面的代码中,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 内的连接字符串很好。

【问题讨论】:

标签: c# asp.net-mvc-5 connection-string static-classes


【解决方案1】:

这个:

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

问题是您正在访问配置文件。必须先将它们转换为对象,然后才能访问它们。这就是上面的代码所做的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-28
    相关资源
    最近更新 更多