我使用的是C# +VSTS3.5+ .Net 2008 + ADO.Net + SQL Server2008。并且我在我的应用程序中共享一个单一的SQL Connection对象(在下面的示例中是TestDBConnection变量)。
我遇到的例外是,“已经有一个打开的DataReader与此命令关联,必须先关闭它。”你知道出什么问题了吗?
我正在使用的应用程序中的模式都是这样的,即共享单个db连接对象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();
}先谢谢你,乔治
发布于 2009-07-09 07:51:33
不要共享连接,请使用connection pooling instead。如果您在连接上同时执行两件事,则可能需要查看MARS。
对于测试,将以下内容添加到您的连接字符串:;MultipleActiveResultSets=True;,并查看这是否“修复”了错误。很多人认为你应该使用avoid using MARS,所以这是需要考虑的事情。
发布于 2009-07-09 08:05:00
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();
}
}是我在多线程情况下使用的模式,没有任何问题。
顺便说一句,这就是连接池。
发布于 2009-07-09 07:52:10
乔治,有没有可能异常告诉你的是事实?是否还有其他已启动但尚未完成的命令?
https://stackoverflow.com/questions/1102409
复制相似问题