【发布时间】: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;
}
}
问题在于在静态类中使用静态连接字符串字段。那么,有没有办法在不使用任何非静态公共类的情况下解决这个问题?
更新:
请注意以下几点:
我不想使用非静态方法,我的问题是我们如何使用静态方法来解决这个问题。
-
当我们使用静态字段时,我们立即对其进行初始化:
static string v1 = "hello";但是为什么以下代码的初始化在返回实际连接字符串之前会抛出 null 呢?
static string connstr = ConfigurationManager.ConnectionStrings["DbSystem2018"].ConnectionString;
顺便说一句,web.config 内的连接字符串很好。
【问题讨论】:
-
我以前读过这个,但正如我所提到的,我不想使用非静态类。您发送的链接中解释的是使用非静态类。提前致谢。
-
查看异常及其提供的诊断数据。我的第一条评论中的链接解释了如何排除和诊断那些 NullReferenceExceptions。
-
请发布例外。或者更好的是,看看异常说明了什么,哪个函数正在运行到一个空引用
标签: c# asp.net-mvc-5 connection-string static-classes