2010-04-23 98 views
3

我有一个最初需要连接到Sybase(通过ODBC)的应用程序,但我还需要添加连接到SQL Server的能力。由于ODBC应该能够处理这两个问题,所以我认为我处于一个很好的位置。不幸的是,默认情况下,SQL Server不会让我嵌套ODBC命令和ODBCDataReaders--它会抱怨连接忙(连接忙于另一个命令的结果)。打开SQL Server的ODBC连接中的多个结果集

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

创建SystemDSN时,DSN向导没有entr y。 (为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本机驱动程序...

+1

不是一个真正的解决方案,而是过多的信息(或者至少相当一点):[SQL Server 2005中的多活动结果集(MARS)](http://msdn.microsoft.com/zh-cn/library /ms345109%28SQL.90%29.aspx)。另一方面,也许你已经阅读过......你使用的是什么版本的SQL Server? 2005+? – scherand 2010-04-23 21:34:54

回答

4

据对Using Multiple Active Result Sets (MARS)的SNI文件:

的SQL服务器本机客户端ODBC 驱动程序通过向SQLSetConnectAttr和 SQLGetConnectAttr函数添加 来支持MARS。 SQL_COPT_SS_MARS_ENABLED一直 添加,以接受 SQL_MARS_ENABLED_YES或 SQL_MARS_ENABLED_NO,与 SQL_MARS_ENABLED_NO是默认值。 另外,新增连接字符串 关键字Mars_Connection,已被添加到 。它接受“是”或“否” 值; “否”是默认

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

+0

这个数据库是sql server 2000 - 我意识到MARS不能用于SQL Server 2000,但我只能通过2005 SQL Server Management Studio看到它,所以我忘记了实际的数据库版本是什么... – 2010-04-23 21:46:55