多线程数据库已更新

时间:2011-12-12 13:28:59

标签: c# multithreading sql-server-2005 database-connection

我有一个Windows服务(C#),我创建多个线程,尝试更新我的数据库中的状态(SQL Server 2005)。

我最初有一个SELECT,之后有一个UPDATE必须执行。当我不使用锁来同步我的线程时,我收到错误

  

已经有一个与此Connection关联的开放DataReader   必须先关闭

但是当我使用lock(在静态对象上)时,更新速度非常慢。

任何人都可以帮助我解决这个问题。

3 个答案:

答案 0 :(得分:5)

在尝试将其连接用于其他任何事情之前,请确保您的DataReader已关闭。我建议你重构你的代码,这样你就不会在线程之间共享连接。如果您可以提供有关您要实现的确切内容的更多信息,我可以提供有用的代码示例。

答案 1 :(得分:5)

您在应用程序中使用的每个命令对象都应该具有自己的连接对象,您可以在执行命令之前立即打开它,然后立即关闭。 (最好包含在using声明中)

信任连接池技术以处理实际的底层连接。这将阻止多个线程同时尝试在同一连接上执行多个命令(这就是您所看到的错误所在。)

线程之间唯一应该共享的是连接 string

答案 2 :(得分:0)

当您在同一连接上同时打开多个DataReader时会发生这种情况,即您调用SqlCommand.ExecuteReader但在再次调用之前不要关闭此方法返回的SqlDataReader(无论是在同一命令上还是在同一命令上执行另一个命令)连接)。
也试试:
MultipleActiveResultSets=True在连接链中。