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

时间:2012-01-26 11:10:19

标签: 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. 只有部分用户才会遇到此问题,而不是所有用户
  4. 我已经尝试过没有运气了:

    1. 删除并重新安装数据库
    2. 已卸载并重新安装SQL Server实例
    3. 检查了SQL Server中的用户/帐户属性(一切正常)
    4. 如果您需要特定的信息,请告诉我

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

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

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

      我希望这有助于你帮助我......

6 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:1)

只是想纠正dataol的回答并说MARS_Connection应设置为"是"而不是" True"启用多个活动结果集。至少在SQL Server 2012上,如果您使用的是DSN文件:

[ODBC]
DRIVER=SQL Server Native Client 11.0
DATABASE=MYDBNAME
WSID=
Trusted_Connection=Yes
SERVER=
MARS_Connection=Yes

答案 2 :(得分:0)

要使用MSSQL驱动程序为SQL连接提供多个活动结果集(MARS)支持,您必须添加一个名为Mars_Connection的密钥,并将其值设置为True

答案 3 :(得分:0)

@ienax_ridens,我最近遇到同样的问题使用相同的工具(Delphi和Devart-SDAC) 在我的例子中,一个特定的查询给出两个结果集。 我的TMSQuery如下所述

If Condition= 1 
begin
 Select * from #TempTable1
end else 
begin
  -- Some more stuff
  Insert INTO #TempTable2
 --
 --
End
Select * from TempTable1 -- here is the problem

所以在条件= 1的情况下,它给出了两个结果集并导致“连接忙于另一个命令的结果”

我希望这会对你有所帮助。

编辑:我发现你发帖已经很老了,请分享你为解决这个错误所做的工作

答案 4 :(得分:0)

检查您的兼容模式,当我们从2008年数据库迁移到2016年数据库时,我不得不将其设置为2012年兼容模式。

答案 5 :(得分:-1)

我遇到了同样的问题,并解决了安装Microsoft odbc驱动程序11(msodbcsql)(https://www.microsoft.com/pt-br/download/confirmation.aspx?id=36434)的问题。