为什么只有一些用户得到错误:"连接忙于另一个命令的结果"

ien*_*ens 8 sql-server delphi database-connection sql-server-2008-r2

我有一个使用DevArt的SDAC组件连接到SQL Server数据库的Delphi应用程序,我们有200个软件安装,只有客户,有些用户,我注意到以下错误:

"Connection is busy with results for another command" = "La connessione è occupata dai risultati di un altro comando".

SQL vers.:SQL Server 2008 R2 Express启用了文件流完全

我的应用程序创建了db用户和SQL帐户登录:

  1. 创建一个新用户,然后没有问题
  2. 在我的应用程序中更改用户代码,这意味着创建了另一个db用户和SQL帐户登录,我有错误
  3. 这个问题只发生在一些用户,而不是所有用户

我没有运气就试过了:

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

如果您需要特定的信息,请告诉我

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

我从Studio Management更好地检查了所有Instance属性,我注意到没有检查CPU(见下图). 未检查CPU的标志

相反,在SQL Server的所有其他正常安装中,我看到填充复选框.可能是问题吗?

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

Dev*_*art 5

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


小智 5

只是想更正 dataol 的答案并说 MARS_Connection 应该设置为“是”而不是“真”以启用多个活动结果集。如果您使用的是 DSN 文件,至少在 SQL Server 2012 上:

[ODBC]
DRIVER=SQL Server Native Client 11.0
DATABASE=MYDBNAME
WSID=
Trusted_Connection=Yes
SERVER=
MARS_Connection=Yes
Run Code Online (Sandbox Code Playgroud)