在ODBC连接中打开多个结果集到SQL Server

我有一个最初需要连接到Sybase(通过ODBC)的应用程序,但我还需要添加连接到SQL Server的function。 由于ODBC应该能够处理两者,我认为我处于有利位置。

不幸的是,默认情况下,SQL Server不会让我嵌套ODBC命令和ODBCDataReaders – 它会抱怨连接繁忙(连接忙于另一个命令的结果)。

我知道在通过本机驱动程序连接到SQL Server时,我必须指定在类似情况下允许多个活动结果集(MARS),所以我认为这不是问题。

创建SystemDSN时,DSN向导无需任何操作。

有些人提供了注册表黑客来解决这个问题,但这不起作用(向HKEY_LOCAL_MACHINE \ SOFTWARE \ ODBC \ ODBC.INI \ system-dsn-name添加值为Yes的MARS_Connection)。

另一个建议是创建一个文件-dsn,并为其添加“MARS_Connection = YES”。 没工作。

最后,一个无DSN的连接字符串。 我尝试过这个(使用MultipleActiveResultSets – 与Sql Server连接使用的变量相同),

"Driver={SQL Native Client};Server=xxx.xxx.xxx.xxx;Database=someDB;Uid=u;Pwd=p;MultipleActiveResultSets=True;" 

还有这个:

 "Driver={SQL Native Client};Server=192.168.75.33\\ARIA;Database=Aria;Uid=sa;Pwd=service;MARS_Connection=YES;" 

我检查了各种连接字符串网站 – 他们都建议我已经尝试过。

我应该声明我已经尝试过SQL Server驱动程序和SQL Server本机驱动程序……

根据有关使用多个活动结果集(MARS)的SNI文档:

SQL Server Native Client ODBC驱动程序通过添加SQLSetConnectAttr和SQLGetConnectAttr函数来支持MARS。 已添加SQL_COPT_SS_MARS_ENABLED以接受SQL_MARS_ENABLED_YES或SQL_MARS_ENABLED_NO,SQL_MARS_ENABLED_NO是默认值。 此外,添加了一个新的连接字符串关键字Mars_Connection。 它接受“是”或“否”的值; “no”是默认值

确保您的客户端加载正确的驱动程序,使用Mars_Connection=yes ,并通过检查SQLGetConnectAttr上的 SQL_COPT_SS_MARS_ENABLED在应用程序中进行validation。