【发布时间】:2014-01-28 01:09:24
【问题描述】:
我在下面有一个对象:
public class DatabaseAccess
{
private static string sConnStr;
private static SqlConnection sqlConn;
private static string ConnectionString
{
get
{
if (String.IsNullOrEmpty(sConnStr))
{
sConnStr = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
}
return sConnStr;
}
}
public static int OpenConnection
{
get
{
sqlConn = new SqlConnection(ConnectionString);
return 0;
}
}
public static SqlConnection Connection
{
get
{
if (sqlConn.State != ConnectionState.Open)
{
sqlConn = new SqlConnection(ConnectionString);
sqlConn.Open();
}
return sqlConn;
}
}
}
所以每当我需要在我的网络应用程序中建立连接时,我都会使用类似的东西:
DataTable dt = new DataTable();
using (SqlConnection cnn = DatabaseAccess.Connection)
{
using (SqlDataAdapter da = new SqlDataAdapter("MyAStoredProcedure", cnn))
{
da.SelectCommand.CommandType = CommandType.StoredProcedure;
da.Fill(dt);
}
}
return dt;
一切似乎都很好,除了当有 2 个用户同时运行代码时,我的 Web 应用程序会出现以下错误:
已经有一个打开的与此命令关联的 DataReader 需要关闭。
我需要一些建议如何解决上述问题?
谢谢。
【问题讨论】:
-
您能否解释一下为什么您的
Connection必须是static(这是您看到错误的原因)? -
我还有很多其他的数据库操作,所以我将只使用相同的静态连接。所以看起来这是错误的原因,那我该怎么说呢?
标签: c# asp.net sqlconnection