我正在使用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();
}
提前谢谢,
乔治
答案 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)