2012-08-15 109 views
9

我試圖從使用iODBC的Mac開發機器連接到Microsoft SQL Server。無論我做什麼,我都會從FreeTDS驅動程序中收到錯誤消息Unable to connect to data source。在查閱了各種手冊,博客文章和StackOverflow問題之後,我在智慧的結尾。在Mac上使用iODBC連接到MS SQL Server

我使用Mac OS X 10.7.4,通過Homebrew安裝FreeTDS版本0.91。下面是我在做什麼:

$ brew install freetds 
$ mkvirtualenv odbc 
$ workon odbc 
$ pip install pyodbc 

$ tsql -H localhost -U mydbusername -P mydbpassword -p 1433 
locale is "en_US.UTF-8" 
locale charset is "UTF-8" 
using default charset "UTF-8" 
1> quit 

上述連接和作品,但:

$ iodbctest 
iODBC Demonstration program 
This program shows an interactive SQL processor 
Driver Manager: 03.52.0607.1008 

Enter ODBC connect string (? shows list): driver={TDS};server=localhost;uid=mydbusername;pwd=mydbpassword;database=mydbname 
1: SQLDriverConnect = [FreeTDS][SQL Server]Unable to connect to data source (0) SQLSTATE=08001 
1: ODBC_Connect = [FreeTDS][SQL Server]Unable to connect to data source (0) SQLSTATE=08001 

由於我最終計劃通過PyODBC使用它,我想,還有:

$ python 
Python 2.7.3 (default, Jun 22 2012, 00:35:38) 
[GCC 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2335.15.00)] on darwin 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import pyodbc 
>>> c = pyodbc.connect(driver='/usr/local/lib/libtdsodbc.so', host='localhost', name='mydbname', uid='mydbusername', pwd='mydbpassword') 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
pyodbc.Error: ('08001', '[08001] [FreeTDS][SQL Server]Unable to connect to data source (0) (SQLDriverConnect)') 

我已經嘗試過在博客文章和SO帖子中建議的所有方式......在ODBC Administrator中創建DSN,創建一個~/.odbc.ini,試圖使用unixODBC(它不能與PyODBC一起使用)連接字符串,而不是關鍵字參數等。我還通過iODBC生成了跟蹤文件,我粘貼了here,但是我無法從中收集更多信息,而不是從錯誤消息中收集。因爲我的IT部門限制我只能從生產服務器的IP連接,所以它適用於GUI客戶端( SQuirreLSQL),所以我假設轉發是正確的。)

+2

您指定的pyodbc連接字符串端口? – sunprophit 2012-08-15 08:59:42

+0

我**知道**它必須是簡單的我失蹤了!非常感謝你的sunprophit。 註釋以備將來參考:FreeTDS(或iODBC?)沒有驅動程序的「默認」端口的概念。 – josePhoenix 2012-08-15 15:01:30

+0

@sunprophit:剛剛檢查,它現在工作完美!你可以發佈這個答案,以便我可以投票/接受它嗎? – josePhoenix 2012-08-15 17:35:37

回答

3

在連接字符串中應該使用'port'參數以防DSN連接。

否則,你的口可以在你的DSN或驅動設置中指定(ODBC.INI分別freetds.conf)

+1

花了這麼長時間才發現這個問題的部分原因是,確切的代碼在我的服務器上使用Ubuntu和unixODBC使用FreeTDS。在那裏,我可以省略端口號,事情仍然有效。 (希望如果我在這個問題和評論中有足夠的相關關鍵字,沒有人會像我一樣浪費時間!) – josePhoenix 2012-08-16 04:47:36

相關問題