2013-06-04 12 views
10

Mam wielką trudność, aby wszystkie te trzy elementy współpracowały ze sobą w harmonii. Sądzę, że wyliczę wszystkie różne konfiguracje wraz z kodem testowym, aby sprawdzić, czy para świeżych oczu zdaje sobie sprawę z mojej głupoty.Problemy z UnixODBC, FreeTDS i PyODBC

Używam wersji 12.04 Unbuntu Server i próbuję połączyć się z serwerem MSSQL 2008 i ostatecznie używam go z PyODBC.

Jednak, gdy tylko wprowadzenie w

tsql -S T2 -U Foo -P Bar 

otrzymuję

1> 
2> 
3> 
4> 
5> 
6> 
7> 
8> 
9> 
10> 
11> 

itp

W każdym razie, jeśli ktoś byłby w stanie pomóc (i byłbym dozgonnie wdzięczny jeśli możesz oczyścić mnie z tej mgły), oto moje obecne konfiguracje.

To mój /etc/odbc.ini

[ODBC Data Sources] 
odbcname  = MySQL 
T2   = MSSQL 

[odbcname] 
Driver  = /usr/lib/odbc/libmyodbc.so 
Description = MyODBC 3.51 Driver DSN 
SERVER  = Foobar 
PORT   = 3306 
USER   = Foo 
Password  = Bar 
Database  = Foobar 
OPTION  = 3 
SOCKET  = 

[T2] 
Driver  = FreeTDS 
Description = ODBC connection via FreeTDS 
SERVER  = FOOBAR 
PORT   = 1433 
USER   = Foo 
Password  = Bar 
Database  = Foobar 
OPTION  = 3 
SOCKET  = 

[Default] 
Driver  = /usr/local/lib/libmyodbc3.so 
Description = MyODBC 3.51 Driver DSN 
SERVER  = FOOBAR 
PORT   = 3306 
USER   = foo 
Password  = bar 
Database  = FOOBAR 
OPTION  = 3 
SOCKET  = 

Poniżej moja /etc/odbcinst.ini

[FreeTDS] 
Description=FreeTDS Driver 
Driver=/usr/lib/odbc/libtdsodbc.so 
Setup=/usr/lib/odbc/libtdsS.so 
CPTimeout= 
CPReuse= 
FileUsage=1 

Poniżej jest moja freetds.conf

# This file is installed by FreeTDS if no file by the same 
# name is found in the installation directory. 
# 
# For information about the layout of this file and its settings, 
# see the freetds.conf manpage "man freetds.conf". 

# Global settings are overridden by those in a database 
# server specific section 
[global] 
     # TDS protocol version 
;  tds version = 4.2 

     # Whether to write a TDSDUMP file for diagnostic purposes 
     # (setting this to /tmp is insecure on a multi-user system) 
;  dump file = /tmp/freetds.log 
;  debug flags = 0xffff 

     # Command and connection timeouts 
;  timeout = 10 
;  connect timeout = 10 

     # If you get out-of-memory errors, it may mean that your client 
     # is trying to allocate a huge buffer for a TEXT field. 
     # Try setting 'text size' to a more reasonable limit 
     #text size = 64512 

[T2] 
     host = FOOBAR 
     port = 1433 
     tds version = 7.0 
     client charset = UTF-8 
     text size = 20971520 
[global] 
     # TDS protocol version 
     tds version = 7.0 

I mój plik testowy Pythona tylko na dobrą miarę

import pyodbc 
import sys 

try: 
    #tempsystrends = pyodbc.connect('DRIVER=FreeTDS;SERVER=FOOBAR;PORT=1433;DATABASE=T2;UID=FOO;PWD=bar;TDS_Version=7.0;') 
    cursor = tempsystrends.cursor() 
except pyodbc.Error as e: 
     print "Error: %s" % (e.args[1]) 
     sys.exit(1) 

Odpowiedz

13

podłączyć do różnych baz danych za pomocą PHP przy użyciu unixodbc, tu jest moja konfiguracja serwera Microsoft SQL:

/etc/odbc.ini

# Define a connection to a Microsoft SQL server 
# The Description can be whatever we want it to be. 
# The Driver value must match what we have defined in /etc/odbcinst.ini 
# The Database name must be the name of the database this connection will connect to. 
# The ServerName is the name we defined in /etc/freetds/freetds.conf 
# The TDS_Version should match what we defined in /etc/freetds/freetds.conf 
[mssql] 
Description    = MSSQL Server 
Driver     = freetds 
Database    = XXXXXX 
ServerName    = MSSQL 
TDS_Version    = 8.0 

/etc/odbcinst.ini

# Define where to find the driver for the Free TDS connections. 
[freetds] 
Description  = MS SQL database access with Free TDS 
Driver   = /usr/lib/i386-linux-gnu/odbc/libtdsodbc.so 
Setup   = /usr/lib/i386-linux-gnu/odbc/libtdsS.so 
UsageCount  = 1 

/etc/freetds/freetds.conf

# The basics for defining a DSN (Data Source Name) 
# [data_source_name] 
#  host = <hostname or IP address> 
#  port = <port number to connect to - probably 1433> 
#  tds version = <TDS version to use - probably 8.0> 

# Define a connection to the Microsoft SQL Server 
[mssql] 
     host = XXXXXX 
     port = 1433 
     tds version = 8.0 

Następnie przetestować połączenie:

isql mssql username password 

W zależności od środowiska Twojego username może być w formacie: domena \ nazwa_użytkownika

Po wydaniu polecenia powinieneś zobaczyć coś takiego:

+---------------------------------------+ 
| Connected!       | 
|          | 
| sql-statement       | 
| help [tablename]      | 
| quit         | 
|          | 
+---------------------------------------+ 
SQL> 
+2

WOW. Jest to prawdopodobnie najbardziej kompletna odpowiedź, jaką kiedykolwiek przeczytałem na temat przepełnienia stosu. Zmieniono tylko dla mnie lokalizację 64-bitową w /etc/odbcinst.ini: /usr/lib/x86_64-linux-gnu/odbc/libtdsodbc.so – philshem

+1

@philshem - dziękuję, cieszę się, że było użyteczne! –

+2

Najbardziej kompletna odpowiedź do tej pory! – digz6666

Powiązane problemy