C# 在静态类内使用connectionstring时引发Null引用异常

C# 在静态类内使用connectionstring时引发Null引用异常,c#,asp.net-mvc-5,connection-string,static-classes,C#,Asp.net Mvc 5,Connection String,Static Classes,在我的项目中,我在非静态类中使用了连接字符串,它工作得很好。但现在我正在开发一个在静态类中使用连接字符串的项目。在下面的代码中,Catch块将抛出一个错误,如下所示: NullReferenceException:对象引用未设置为对象的实例 如果我注释掉这一行“Throw”,它可以正常工作,但我想了解代码中出现了什么错误 DataAccessclass: public class DataAccess { static string connstr = ConfigurationMan

在我的项目中,我在非静态类中使用了连接字符串,它工作得很好。但现在我正在开发一个在静态类中使用连接字符串的项目。在下面的代码中,Catch块将抛出一个错误,如下所示:

NullReferenceException:对象引用未设置为对象的实例

如果我注释掉这一行“Throw”,它可以正常工作,但我想了解代码中出现了什么错误

DataAccess
class:

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;
    }
}
但是为什么以下代码的初始化在返回实际连接字符串之前抛出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;
}
复制粘贴来自:

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

这是:

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;
}
复制粘贴来自:


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

可能与我之前读过的代码重复,但正如我所提到的,我不想使用非静态类。您发送的链接中解释的是使用非静态类。提前感谢。请查看异常及其提供的诊断数据。我的第一条评论中的链接解释了如何排除和诊断这些NullReferenceException。可能重复的请发布异常。或者更好,看看异常是怎么说的,哪个函数运行在一个空的referencePossible副本中,我以前读过这个,但是正如我提到的,我不想使用非静态类。您发送的链接中解释的是使用非静态类。提前感谢。请查看异常及其提供的诊断数据。我的第一条评论中的链接解释了如何排除和诊断这些NullReferenceException。可能重复的请发布异常。或者更好的方法是,看看异常是怎么说的,哪个函数运行到空引用中