我正在使用C#+ .Net 3.5 + VSTS 2008 + ADO.Net + SQL Server 2008.我正在共享一个单独的SQL连接对象(TestDBConnection变量,在下面的示例中)在我的应用程序。ADO.Net DataReader错误:已打开DataReader
我遇到的例外情况是“已经有一个打开的DataReader与这个Command关联,必须先关闭它......”任何想法有什么问题?
我正在使用的应用程序中的模式都是这样的,即共享单个数据库连接对象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();
}
由于事先 乔治
感谢RichardOD,共享连接对象是我的问题的根源?是否有任何提到一个连接的文档用于查询命令A,我们不能将它用于命令B? – George2 2009-07-09 08:21:49
那么从你在John的回答评论中描述的情况来看,它看起来像你有一些严重的多线程问题。您可以使用同一个连接与多个命令(在同一个线程中),但推荐的方法是使用连接池。如果您一次使用多个SQL Server命令,则需要考虑使用MARS。首先解决线程/共享连接问题,您的问题可能会消失。在你的情况下,我不认为你需要MARS。 HTH。 – RichardOD 2009-07-09 08:30:13