我有一个Windows服务(C#)创建多个线程,它将尝试更新我的数据库中的状态(SQL Server 2005)。多线程数据库更新
我有一个SELECT
最初和一个UPDATE
后来必须执行。当我不使用锁来同步我的主题,我得到错误
已经有与此Connection 必须先关闭
但相关联的打开的DataReader当我用锁(在静态对象上)更新非常慢。
任何人都可以帮我解决这个问题。
我有一个Windows服务(C#)创建多个线程,它将尝试更新我的数据库中的状态(SQL Server 2005)。多线程数据库更新
我有一个SELECT
最初和一个UPDATE
后来必须执行。当我不使用锁来同步我的主题,我得到错误
已经有与此Connection 必须先关闭
但相关联的打开的DataReader当我用锁(在静态对象上)更新非常慢。
任何人都可以帮我解决这个问题。
您在应用程序中使用的每个命令对象都应该有它的自己的连接对象,您在执行该命令之前立即打开并立即关闭。 (最好包装在using
声明中)
信任连接池技术来处理实际的底层连接。这将阻止多个线程试图在同一个连接上同时执行多个命令(这就是你所看到的错误在谈论什么)。
线程之间应该共享的唯一东西是连接字符串。
确保您的DataReader已关闭,然后尝试将其连接用于其他任何事情。我会建议你重构你的代码,这样你就不会共享线程之间的连接。如果您可以提供更多关于您正在尝试实现的信息,我可能会提供有用的代码示例。
我有5个线程从队列中读取消息并尝试更新数据库的消息状态。下面是我的线程调用的代码 – json
在同一连接上同时打开多个DataReader时,会发生这种情况,即您调用SqlCommand.ExecuteReader但在再次调用该方法之前不要关闭此方法返回的SqlDataReader(或者在同一命令上或另一个命令上相同的连接)。
另请尝试:
MultipleActiveResultSets=True
连接链。
感谢您的回复。我针对不同的线程使用了不同的连接,并解决了我的问题 – json