首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ADO.Net DataReader错误:已是打开的DataReader

ADO.Net DataReader错误:已是打开的DataReader
EN

Stack Overflow用户
提问于 2009-07-09 07:49:04
回答 3查看 3.2K关注 0票数 0

我使用的是C# +VSTS3.5+ .Net 2008 + ADO.Net + SQL Server2008。并且我在我的应用程序中共享一个单一的SQL Connection对象(在下面的示例中是TestDBConnection变量)。

我遇到的例外是,“已经有一个打开的DataReader与此命令关联,必须先关闭它。”你知道出什么问题了吗?

我正在使用的应用程序中的模式都是这样的,即共享单个db连接对象TestDBConnection,并使用单个TestDBConnection变量在其上创建命令并执行存储过程。

代码语言:javascript
复制
        using (SqlCommand testCommand = new SqlCommand())
        {
            testCommand.Connection = TestDBConnection;
            testCommand.CommandType = CommandType.StoredProcedure;
            testCommand.CommandText = "prc_AddOrderStatus";
            testCommand.Parameters.Add("@orderID", SqlDbType.NVarChar).Value = orderID;
            testCommand.ExecuteNonQuery();
        }

先谢谢你,乔治

EN

回答 3

Stack Overflow用户

发布于 2009-07-09 07:51:33

不要共享连接,请使用connection pooling instead。如果您在连接上同时执行两件事,则可能需要查看MARS

对于测试,将以下内容添加到您的连接字符串:;MultipleActiveResultSets=True;,并查看这是否“修复”了错误。很多人认为你应该使用avoid using MARS,所以这是需要考虑的事情。

票数 7
EN

Stack Overflow用户

发布于 2009-07-09 08:05:00

代码语言:javascript
复制
using (sqlConnection theconnection = new sqlconnection(initialise it))
{
 using (SqlCommand testCommand = new SqlCommand())
        {
            testCommand.Connection = theConnection
            testCommand.CommandType = CommandType.StoredProcedure;
            testCommand.CommandText = "prc_AddOrderStatus";
            testCommand.Parameters.Add("@orderID", SqlDbType.NVarChar).Value = orderID;
            testCommand.ExecuteNonQuery();
        }
}

是我在多线程情况下使用的模式,没有任何问题。

顺便说一句,这就是连接池。

票数 2
EN

Stack Overflow用户

发布于 2009-07-09 07:52:10

乔治,有没有可能异常告诉你的是事实?是否还有其他已启动但尚未完成的命令?

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1102409

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档