我有一个使用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帐户登录:
我已经尝试过没有运气了:
如果您需要特定的信息,请告诉我
------------新信息------------
我更好地检查了Studio Management中的所有Instance属性,我注意到没有检查CPU(见下图)。
相反,在SQL Server的所有其他正常安装中,我看到填充复选框。 这可能是问题吗?
我希望这有助于你帮助我......
答案 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)的问题。