错误:已经有一个与此命令关联的打开DataReader,必须先关闭它。多个用户
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了错误:已经有一个与此命令关联的打开DataReader,必须先关闭它。多个用户相关的知识,希望对你有一定的参考价值。
我有一个使用ADO.Net连接到SQL Server 2012的asp.net C#应用程序(.net 4.0),遇到错误,该错误表示:
[InvalidOperationException:已经有一个与此命令关联的打开DataReader,必须先关闭它。
我非常清楚DataReader是什么,但我的问题是在以下条件下出现此错误:
- 我在我的应用程序中根本没有使用过任何DataReader,我到处都只使用过DataAdapter。代码在本地环境中运行时工作正常,没有错误。
- 即使在单个用户使用IIS7中部署后,应用程序也能正常工作。
- 只有多个用户开始使用IIS7中托管的网站时才会出现此错误。
请帮助,我也怀疑我在IIS7中托管的任何问题
答案
经过大量的反复试验,最后我发现它是SqlConnections的一个问题。我以前做的是在我的DAL图层对象的实例化中打开一个连接。因此,每当来自同一个DAL对象的两个方法一起调用时,它就会抛出错误。我通过在每次调用数据库时打开和关闭连接来解决它。现在一切正常。这也允许最多用户一次使用该应用程序。以下是我在DAL的代码示例: -
DataTable dt = new DataTable();
try
{
using (SqlConnection sqlcon = new SqlConnection(ConfigurationManager.ConnectionStrings["MyConnectionString"].ToString()))
{
if (sqlcon.State == ConnectionState.Closed)
sqlcon.Open();
SqlCommand sqlCommand = new SqlCommand
{
Connection = sqlcon,
CommandType = CommandType.StoredProcedure,
CommandText = "MyStoredProc"
};
sqlCommand.Parameters.AddWithValue("@Parameter1", Parameter1);
using (SqlDataAdapter adapter = new SqlDataAdapter(sqlCommand))
{
adapter.Fill(dt);
}
}
return dt;
}
catch (Exception exp)
{
LogHelper.LogError(string.Concat("Exception Details: ", ExceptionFormatter.WriteExceptionDetail(exp)));
throw exp;
}
finally
{
dt.Dispose();
}
如果您知道,请发布更好的方法,谢谢。
以上是关于错误:已经有一个与此命令关联的打开DataReader,必须先关闭它。多个用户的主要内容,如果未能解决你的问题,请参考以下文章
错误:已经有一个与此命令关联的打开DataReader,必须先关闭它。多个用户
已经有一个打开的 DataReader 与此命令关联,必须先关闭
实体框架:已经有一个打开的 DataReader 与此命令关联
已经有一个打开的 DataReader 与此命令关联,必须先关闭