2012-08-15 16 views
9

मैं आईओडीबीसी का उपयोग कर अपने मैक विकास मशीन से एक Microsoft SQL सर्वर से कनेक्ट करने का प्रयास कर रहा हूं। कोई फर्क नहीं पड़ता कि मैं क्या करता हूं, मुझे फ्रीटीडीएस ड्राइवर से त्रुटि संदेश Unable to connect to data source मिलता है। विभिन्न मैनुअल, ब्लॉग पोस्ट, और स्टैक ओवरफ्लो प्रश्नों से परामर्श करने के बाद, मैं अपने बुद्धि के अंत में हूं।मैक पर iODBC के साथ एमएस एसक्यूएल सर्वर से कनेक्ट

मै मैक ओएस एक्स 10.7.4 का उपयोग कर रहा हूं, फ्रीबड्स संस्करण 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)') 

मैंने ब्लॉग पोस्ट और एसओ पोस्ट में सुझाए गए सभी प्रकार की चीजों की कोशिश की है ... ओडीबीसी प्रशासक में डीएसएन बनाना, ~/.odbc.ini बनाना, जो यूनिक्सोडबीसी (जो पीओओडीबीसी के साथ काम नहीं करता) का उपयोग करने का प्रयास कर रहा है, कीवर्ड तर्कों के बजाय कनेक्शन स्ट्रिंग इत्यादि। मैंने आईओडीबीसी के माध्यम से एक ट्रेस फ़ाइल भी बनाई है, जिसे मैंने here चिपकाया है, लेकिन मैं त्रुटि संदेश से अधिक जानकारी प्राप्त नहीं कर सका।

(मैं उल्लेख करना चाहिए कि मैं अपने ~/.ssh/config में लाइन LocalForward localhost:1433 production.someinstitution.edu:1433 साथ SSH पर एसक्यूएल सर्वर के लिए कनेक्शन सुरंग कर रहा हूँ, क्योंकि मेरी आईटी विभाग मुझे सीमित है उत्पादन सर्वर का IP से केवल कनेक्ट करने के लिए। यह एक जीयूआई ग्राहक के लिए काम करता है (SQuirreLSQL) तो मुझे लगता है कि अग्रेषण सही है।)

+2

आप pyodbc कनेक्शन स्ट्रिंग में पोर्ट निर्दिष्ट है? – sunprophit

+0

मुझे ** पता था ** यह कुछ आसान होना था जो मुझे याद आ रही थी! बहुत बहुत धन्यवाद सनप्रोफिट। भविष्य के संदर्भ के लिए नोट किया गया: फ्रीटीडीएस (या iODBC?) में ड्राइवर के लिए 'डिफ़ॉल्ट' पोर्ट की अवधारणा नहीं है। – josePhoenix

+0

@sunprophit: बस चेक किया गया, और यह अभी पूरी तरह से काम कर रहा है! क्या आप इसे उत्तर के रूप में पोस्ट कर सकते हैं ताकि मैं इसे वोट/स्वीकार कर सकूं? – josePhoenix

उत्तर

3

आपको डीएसएन-कम कनेक्शन के मामले में कनेक्शन स्ट्रिंग में 'पोर्ट' पैरामीटर का उपयोग करना चाहिए। (Odbc.ini और क्रमशः freetds.conf)

अन्यथा अपने बंदरगाह अपने DSN या ड्राइविंग config में निर्दिष्ट किया जा सकता है

+1

यह जानने के लिए इतना लंबा समय था कि यह सही कोड मेरे सर्वर पर उबंटू और यूनिक्सोडबीसी के साथ फ्रीटीडीएस के साथ काम करता था। वहां, मैं बंदरगाह संख्या छोड़ सकता था और चीजें अभी भी काम करती हैं। (उम्मीद है कि अगर मेरे पास इस प्रश्न और टिप्पणियों में पर्याप्त प्रासंगिक कीवर्ड हैं, तो मुझे ऐसा करने के लिए समय बर्बाद नहीं करना होगा!) – josePhoenix