2010-04-23 101 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