2011-12-12 122 views
0

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

我有一个SELECT最初和一个UPDATE后来必须执行。当我不使用锁来同步我的主题,我得到错误

已经有与此Connection 必须先关闭

但相关联的打开的DataReader当我用锁(在静态对象上)更新非常慢。

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

回答

5

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

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

线程之间应该共享的唯一东西是连接字符串

+0

感谢您的回复。我针对不同的线程使用了不同的连接,并解决了我的问题 – json

5

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

+0

我有5个线程从队列中读取消息并尝试更新数据库的消息状态。下面是我的线程调用的代码 – json

0

在同一连接上同时打开多个DataReader时,会发生这种情况,即您调用SqlCommand.ExecuteReader但在再次调用该方法之前不要关闭此方法返回的SqlDataReader(或者在同一命令上或另一个命令上相同的连接)。
另请尝试:
MultipleActiveResultSets=True连接链。