在静态 类 中使用连接字符串时抛出空引用异常
Null Reference Exception Thrown while using connectionstring inside static classes
在我的项目中,我在非静态 classes 中使用了连接字符串,并且工作正常。但是现在我正在开发一个在静态 classes 中使用连接字符串的项目。在下面的代码中,Catch 块将抛出如下所示的错误:
NullReferenceException: Object reference not set to an instance of an object.
如果我注释掉这一行 "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;
}
}
问题在于在静态 classes 中使用静态连接字符串字段。那么,有没有什么办法可以不使用任何非静态public classes 来解决这个问题呢?
更新:
请注意以下事项:
我不想使用非静态方法,我的问题是我们如何使用静态方法解决这个问题。
当我们使用静态字段时,我们立即对其进行初始化:
static string v1 = "hello";
但为什么以下代码的初始化在返回实际连接字符串之前会抛出空值?
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
问题是您正在访问配置文件。这些必须先转换为对象才能访问。这就是上面的代码所做的。
在我的项目中,我在非静态 classes 中使用了连接字符串,并且工作正常。但是现在我正在开发一个在静态 classes 中使用连接字符串的项目。在下面的代码中,Catch 块将抛出如下所示的错误:
NullReferenceException: Object reference not set to an instance of an object.
如果我注释掉这一行 "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;
}
}
问题在于在静态 classes 中使用静态连接字符串字段。那么,有没有什么办法可以不使用任何非静态public classes 来解决这个问题呢?
更新:
请注意以下事项:
我不想使用非静态方法,我的问题是我们如何使用静态方法解决这个问题。
当我们使用静态字段时,我们立即对其进行初始化:
static string v1 = "hello";
但为什么以下代码的初始化在返回实际连接字符串之前会抛出空值?
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
问题是您正在访问配置文件。这些必须先转换为对象才能访问。这就是上面的代码所做的。