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

我最初有一个SELECT ,后来必须执行一个UPDATE 当我不使用锁来同步线程时,出现错误

已经有一个与此连接相关联的打开的DataReader,必须先关闭它

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

谁能帮我解决这个问题。

===============>>#1 票数:5

在尝试将DataReader的连接用于其他任何用途之前,请确保已将其关闭。 我建议您重构代码,以免线程之间不共享连接。 如果您可以提供有关您要实现的目标的更多信息,我也许可以提供有用的代码示例。

===============>>#2 票数:5 已采纳

您在应用程序中使用的每个命令对象都应具有自己的连接对象,在执行命令之前立即将其打开,然后在执行之后立即将其关闭。 (最好包裹在using语句中)

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

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

===============>>#3 票数:0

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

  ask by json translate from so

未解决问题?本站智能推荐: