sql-server - 为什么只有部分用户收到错误 : "Connection is busy with results for another command"

标签 sql-server delphi database-connection sql-server-2008-r2

我有一个 Delphi 应用程序,它使用 DevArt 的 SDAC 组件连接到 SQL Server 数据库,我们安装了 200 个该软件,并且仅针对一个客户,对于某些用户,我注意到以下错误:

“连接正忙于处理另一个命令的结果”=“La connessione è ocpata dai risultati di un altro comando”。

SQL 版本:完全启用文件流的 SQL Server 2008 R2 Express

我的应用程序创建数据库用户和 SQL 帐户登录名:

  1. 创建一个新用户,那就没有问题了
  2. 在我的应用程序中更改用户代码,这意味着创建了另一个数据库用户和 SQL 帐户登录,我遇到了错误
  3. 此问题仅发生在部分用户身上,而非所有用户

我已经尝试过但没有运气:

  1. 删除并重新安装数据库
  2. 卸载并重新安装 SQL Server 实例
  3. 检查了 SQL Server 中的用户/帐户属性(一切正常)

如果您需要具体信息,请告诉我

------------新信息------------

我从 Studio Management 中更好地检查了所有实例属性,我注意到 CPU 没有被检查(见下图)。 CPU's flags not checked

相反,在 SQL Server 的所有其他正常安装中,我看到的是已填充的复选框。 难道是这个问题?

我希望这可以帮助你帮助我......

最佳答案

“连接正忙于处理另一个命令的结果”错误意味着至少有两个查询使用同一连接。如果您在多个线程中使用一个连接,则可能会出现此问题。为了解决这种情况下的问题,每个线程中都应该有连接(TMSConnection 组件)。 此外,如果将 TCustomMSDataSet.FetchAll 属性设置为 False,也可能会出现此问题。当 FetchAll=False 时,此类查询的执行会阻塞当前 session 。为了避免阻塞 OLEDB 创建额外的 session ,这可能导致“连接正忙于处理另一个命令的结果”错误。要解决这种情况下的问题,您应该将 TMSConnection.Options.MultipleActiveResultSets 属性设置为 True。 MultipleActiveResultSets 属性启用对 SQL Server 多事件结果集 (MARS) 技术的支持。它允许应用程序每个连接有多个待处理请求,特别是每个连接有多个事件默认结果集。请注意,MultipleActiveResultSets 属性仅在使用 SQL Native Client 时才起作用。因此,您还应该将 TMSConnection.Options.Provider 属性设置为 prNativeClient。

关于sql-server - 为什么只有部分用户收到错误 : "Connection is busy with results for another command",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9017264/

相关文章:

sql - SQL 中日期格式的问题

sql-server - 为什么要进行索引扫描?

c# - Linq 导致 Top (1) 出现语法错误

Delphi 7 和解码 UTF-8 base64

.net - 在 odbc 连接中使用 like 语句

sql - 如何在 SQL Server 中获取 YY 格式的年份

delphi - 如何从 tWebModule 中检索资源

delphi - 在分层数据集中获取子记录的递归过程

database-design - 事务处理 : How are simultaneous transaction managed?

php - 在每个页面的页脚中使用 mysqli_close 有什么缺点吗?