Connecter MS SQL en utilisant freetds et unixodbc: isql - aucun pilote par défaut spécifié

27

J'essaie de me connecter à la base de données MS SQL à l'aide de freetds et unixodbc . J'ai lu divers guides sur la façon de le faire, mais personne ne travaille pour moi. Lorsque j'essaie de me connecter à la base de données à l'aide de l'outil isql , j'obtiens l'erreur suivante:

$ isql -v TS username password
[IM002][unixODBC][Driver Manager]Data source name not found, and no default driver specified
[ISQL]ERROR: Could not SQLConnect

Quelqu'un at-il déjà établi la connexion à la base de données MS SQL avec freetds et unixodbc sur Ubuntu 12.04? J'apprécierais vraiment de l'aide.

Voici la procédure que j'ai utilisée pour configurer les freetds et unixodbc . Merci d'avance pour votre aide!

Procédure

D'abord, j'ai installé les paquets suivants avec:

sudo apt-get install unixodbc unixodbc-dev freetds-dev tdsodbc

et freetds configurés comme suit:

--- /etc/freetds/freetds.conf ---
[TS]
host = SERVER
port = 1433
tds version = 7.0
client charset = UTF-8

Utiliser l’outil tsql pour me connecter à la base de données en exécutant

tsql -S TS -U username -P password

Comme j'ai besoin d'une connexion odbc , j'ai configuré odbcinst.ini comme suit:

--- /etc/odbcinst.ini ---
[FreeTDS]
Description = FreeTDS
Driver = /usr/lib/x86_64-linux-gnu/odbc/libtdsodbc.so
Setup = /usr/lib/x86_64-linux-gnu/odbc/libtdsS.so
FileUsage = 1
CPTimeout =
CPResuse  =
client charset = utf-8

et odbc.ini comme suit:

--- /etc/odbc.ini ---
[TS]
Description = "test"
Driver = FreeTDS
Servername = SERVER
Server = SERVER
Port = 1433
Database = DBNAME
Trace = No

L'erreur suivante se produit lorsque vous essayez de vous connecter à la base de données à l'aide de l'outil isql avec une telle configuration:

$ isql -v TS username password
[IM002][unixODBC][Driver Manager]Data source name not found, and no default driver specified
[ISQL]ERROR: Could not SQLConnect
    
posée Dejan 24.07.2012 - 15:42
la source

4 réponses

16

Merci, votre message a été très utile pour moi. J'ai pu le faire fonctionner en éliminant les lignes suivantes de mon fichier odbcinst.ini

Setup = /usr/lib/x86_64-linux-gnu/odbc/libtdsS.so
FileUsage = 1
CPTimeout =
CPResuse  =
client charset = utf-8

maintenant mon fichier odbcinst.ini ressemble à ceci:

--- /etc/odbcinst.ini ---
[FreeTDS]
Description = FreeTDS
Driver = /usr/lib/x86_64-linux-gnu/odbc/libtdsodbc.so

et mon fichier odbc.ini ressemble à ceci maintenant:

--- /etc/odbc.ini ---
[TS]
Description = "test"
Driver = FreeTDS
Server = SERVER
Port = 1433
Database = DBNAME

Une fois que j'ai simplifié tout cela a fonctionné très bien. Je ne peux toujours pas le faire fonctionner avec RODBC mais cela a fonctionné avec isql.

Je ne sais pas si cela vous aidera mais votre message m'a aidé. Merci.

    
réponse donnée John Cutsinger 29.10.2012 - 22:19
la source
12

Voici un exemple minimal mais complet expliquant comment se connecter à la base de données SQL Azure avec isql depuis Ubuntu 14.04.1 C'EST. L'exemple est extrait de Comment connecter la base de données SQL Azure à partir d'Ubuntu (avertissement: c'est mon wiki personnel).

Installer les packages nécessaires

$ sudo apt-get -y install freetds-bin tdsodbc unixodbc

Configurer FreeTDS

Fichier /etc/freetds/freetds.conf

[global]
tds version = 7.1

[<SERVERNAME>]
host = <HOST>.database.windows.net
port = 1433

Tester la connexion

À ce stade, la connexion avec tsql devrait fonctionner:

$ tsql -S <SERVERNAME> -U <USERNAME>@<HOST> -P <PASSWORD>

Notez que @<HOST> est requis. Sinon, la connexion se termine par une erreur:

Msg 40531 (severity 11, state 1) from [<SERVERNAME>] Line 1:
    "Server name cannot be determined.  It must appear as the first segment of the server's dns name (servername.database.windows.net).  Some libraries do not send the server name, in which case the server name must be included as part of the user name ([email protected]).  In addition, if both formats are used, the server names must match."
Error 20002 (severity 9):
    Adaptive Server connection failed
There was a problem connecting to the server

Configurer le pilote ODBC

Fichier /etc/odbcinst.ini

[FreeTDS]
Description = FreeTDS Driver
Driver = /usr/lib/x86_64-linux-gnu/odbc/libtdsodbc.so

Configurer les sources de données ODBC

Fichier /etc/odbc.ini

[<DATA_SOURCE_NAME>]
Driver = FreeTDS
Servername = <SERVERNAME>
Port = 1433
Database = <DBNAME>

<SERVERNAME> est le même que dans freetds.conf .

Se connecter avec isql

$ isql -v <DATA_SOURCE_NAME> <USER>@<HOST> <PASSWORD>
+---------------------------------------+
| Connected!                            |
|                                       |
| sql-statement                         |
| help [tablename]                      |
| quit                                  |
|                                       |
+---------------------------------------+
SQL> select current_timestamp
+------------------------+
|                        |
+------------------------+
| 2015-01-02 09:05:55.593|
+------------------------+
SQLRowCount returns 1
1 rows fetched
SQL>

Notez que @<HOST> est requis. Sinon, la connexion se termine par une erreur:

[S1000][unixODBC][FreeTDS][SQL Server]Unable to connect to data source
[37000][unixODBC][FreeTDS][SQL Server]Server name cannot be determined.  It must appear as the first segment of the server's dns name (servername.database.windows.net).  Some libraries do not send the server name, in which case the server name must be included as part of the user name ([email protected]).  In addition, if both formats are used, the server names must match.
[ISQL]ERROR: Could not SQLConnect
    
réponse donnée user272735 02.01.2015 - 10:18
la source
6

Dans mon cas, le problème est dû à de simples retraits dans mon fichier de configuration. Donc, dans /etc/odbc.ini , j'ai supprimé tous les tirets et le tour est joué!

( odbcinst.ini se comporte comme un enfant normal et ne semble pas provoquer de crises de colère.)

    
réponse donnée Sudhanshu 04.09.2014 - 06:01
la source
3

Ubuntu antérieur à 12.04 avait un chemin odbc différent dans le fichier /etc/odbcinst.ini.

L’ancien chemin du pilote était:

Driver = /usr/lib/odbc/libtdsodbc.so

Je l'ai changé pour:

Driver = /usr/lib/x86_64-linux-gnu/odbc/libtdsodbc.so

Voici la configuration complète:

--- /etc/odbcinst.ini ---
[FreeTDS]
Description = tdsodbc
Driver = /usr/lib/x86_64-linux-gnu/odbc/libtdsodbc.so
Setup = /usr/lib/x86_64-linux-gnu/odbc/libtdsS.so
FileUsage = 1
CPTimeout = 5
CPReuse = 5

Fonctionne comme un charme maintenant! Merci!

    
réponse donnée MikeH 10.05.2013 - 22:06
la source

Lire d'autres questions sur les étiquettes