ADO.Net DataReader错误:已经是Open DataReader

时间:2009-07-09 07:49:04

标签: c# .net visual-studio-2008 sql-server-2008 ado.net

我正在使用C#+ .Net 3.5 + VSTS 2008 + ADO.Net + SQL Server 2008.我正在我的应用程序中共享一个单独的SQL Connection对象(我​​的下面示例中的TestDBConnection变量)。

我遇到的异常是,“已经有一个与此命令关联的开放DataReader必须先关闭..”任何想法有什么问题?

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

        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();
        }
提前谢谢, 乔治

3 个答案:

答案 0 :(得分:7)

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

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

答案 1 :(得分:2)

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 :(得分:1)

乔治,这个例外有可能告诉你真相吗?是否还有其他命令已经启动但尚未完成?