Question

Je ne parviens pas à me connecter à une installation SQL Server 2005 à partir de cette application Ruby très simple:

#!/usr/bin/env ruby
require 'rubygems'
require 'sequel'

Sequel.odbc('dev04')['select top 1 * from users'].all

Le DSN dev04 pointe vers mon entrée de fichier odbc.ini :

[dev04]
Driver      = FreeTDS
Description = ODBC connection via FreeTDS
Trace       = 1
Servername  = dev04
Database    = Dev04
UID         = uDev04
PWD         = pwdDev04

FreeTDS est installé dans odbcinst.ini et pointe vers cette configuration dans freetds.conf :

[dev04]
host = hm602.mycompany.com
port = 1433
tds version = 7.0

Ceci fonctionne:

carlos$ tsql -S dev04 -U uDev04 -P pwdDev04
locale is "en_GB.UTF-8"
locale charset is "UTF-8"
1> exit
carlos$

Et ceci aussi:

carlos$ iodbctest "DSN=dev04;UID=uDev04;PWD=pwdDev04"
iODBC Demonstration program
This program shows an interactive SQL processor
Driver Manager: 03.52.0406.1211
Driver: 0.82 (libtdsodbc.so)

SQL>exit 

Have a nice day.
carlos$

Cependant, lorsque j'exécute ce script Ruby, le message d'erreur suivant s'affiche:

carlos$ ruby mssql.rb 
/Library/Ruby/Gems/1.8/gems/sequel-3.4.0/lib/sequel/adapters/odbc.rb:37:in `initialize': ODBC::Error 01000 (20002) [FreeTDS][SQL Server]Adaptive Server connection failed (Sequel::DatabaseConnectionError)
    from /Library/Ruby/Gems/1.8/gems/sequel-3.4.0/lib/sequel/adapters/odbc.rb:37:in `connect'
    from /Library/Ruby/Gems/1.8/gems/sequel-3.4.0/lib/sequel/adapters/odbc.rb:37:in `connect'
    from /Library/Ruby/Gems/1.8/gems/sequel-3.4.0/lib/sequel/database.rb:92:in `initialize'
...

Je comprends que l'erreur "Échec de la connexion à Adaptive Server" peut survenir en raison de différences entre les versions du protocole TDS. J'ai vérifié les journaux et ils semblent tous utiliser la version correcte (7.0), je ne comprends donc pas pourquoi cela pourrait se produire.

Des pointeurs?

Était-ce utile?

La solution

Je suis le responsable de la suite. Malheureusement, je n'ai aucune expérience personnelle de l'utilisation de Sequel pour se connecter à MSSQL avec FreeTDS. Je sais que d’autres personnes l’ont utilisé avec succès.

Votre message d'erreur indique un problème dans la bibliothèque Ruby / ODBC sous-jacente, pas dans Sequel. Si vous pouvez obtenir une connexion utilisant Ruby / ODBC directement, vous ne devriez pas avoir de difficulté à la faire fonctionner avec Sequel.

Désolé, je ne peux pas vous aider davantage.

De plus, bien que cela ne soit pas lié à votre problème actuel, vous devez utiliser l'option: db_type = > "mssql" de l'appel Sequel.odbc.

Autres conseils

Parfois, la gratuité n’est pas gratuite.

La version 7.0 de TDS était correcte pour SQL Server 7.x et se connecte dans de nombreux cas aux versions ultérieures de SQL Server - mais elle ne prend pas en charge toutes les fonctionnalités de ces versions ultérieures.

TDS version 7.1 est correct pour SQL Server 2000 (v8.x); 7.2 est correct pour SQL Server 2005 (v9.x); 7.3 est correct pour SQL Server 2008 (v10.x). En raison d'une certaine confusion dans la documentation de Microsoft, ceux-ci sont généralement spécifiés dans le fichier freetds.conf à l'aide de la version SQL Server, et non de la version de TDS. et SQL Server 2008 n'est pas encore totalement pris en charge. donc je tester avec

tds version = 7.1
tds version = 7.2
tds version = 8.0
tds version = 9.0

Ou ... vous pouvez essayer d'utiliser un pilote commercial comme celui de mon employeur qui a déjà traité une bonne partie de la question. Si vous choisissez cette voie, je vous conseillerais également de consulter la documentation complète de l'adaptateur ODBC Rails

ObDisclaimer: Je travaille pour OpenLink Software, mais ne profite pas directement aux personnes qui choisissent d'utiliser nos produits.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top