我在一个模型中使用了以下代码来处理所有与DB相关的活动,因此每次我想使用数据库时都不会编写冗余的代码,这个模型类看起来像这样:
Shared.cs
:
private static string ConStr
{
get
{
Shared shrObj = new Shared();
return shrObj.DecryptString(ConfigurationManager.ConnectionStrings["constr"].ConnectionString);
}
}
public static SqlConnection SqlCon = new SqlConnection(ConStr);
public static SqlDataReader ORC(SqlCommand sqlCom)
{
SqlDataReader sqlReader=null;
try
{
SqlCon.Open();//ERROR HERE
//The ConnectionString property has not been initialized.
sqlReader = sqlCom.ExecuteReader();
}
catch (Exception ex)
{
WriteToFile(DateTime.Now.ToString("dd-MM-yyyy HH:mm:ss") + " | " + ex, 0);
return sqlReader;
}
return sqlReader;
}
//Functions for closing connections…
//Functions for reading scalar…
//etc.
现在,当我尝试使用这些函数时,从其他模型:
User.cs
internal IEnumerable<User> GetUser()
{
var sqlCom = new SqlCommand("SELECT * FROM [user];", Shared.SqlCon);
using (var blgs = Shared.ORC(sqlCom))
{
// ……. … …
}
}
}
让我感到困惑的另一件事是,当登录时第一次从这里调用此数据读取功能时,它可以正常工作,它始终是第二次调用会产生问题。
可能我只是不打静态属性写。但我必须保持静态,因为SqlConnection
对象使用它本身是静态的,可以直接从类外部使用。
请帮助。
答案 0 :(得分:0)
在网络应用中,通常最好通过如下的using语句打开和关闭连接:
using (SqlConnection conn = new SqlConnection(connectionString))
{
conn.Open();
// do some stuff
}
不要重复使用sqlconnection,因为它可能会导致Web应用程序出现意外超时。