2009-09-09 9 views
1

Je vais avoir des problèmes de connexion à un SQL Server 2005 installer à partir de ce simple application Ruby:Connexion à MS SQL Server 2005 à partir de Mac en utilisant Ruby, ODBC et FreeTDS

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

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

Les points de DSN dev04 à mon odbc.ini entrée de fichier:

[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 il pointe cette configuration dans freetds.conf:

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

Cela fonctionne:

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

Et le fait ceci:

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$ 

Quand je lance ce script Ruby, cependant, je reçois cette erreur:

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 la Une erreur «Échec de la connexion Adaptive Server» peut se produire en raison des différences de version du protocole TDS. J'ai vérifié les journaux et ils semblent tous utiliser la version correcte (7.0), donc je suis complètement perdu quant à la raison pour laquelle cela pourrait se produire.

Des pointeurs?

Répondre

1

Je suis le mainteneur de Sequel. Malheureusement, je n'ai aucune expérience personnelle en utilisant Sequel pour me connecter à MSSQL en utilisant FreeTDS. Je sais que d'autres personnes l'ont utilisé avec succès cependant.

Votre message d'erreur indique un problème dans la bibliothèque Ruby/ODBC sous-jacente, pas dans Sequel lui-même. Si vous pouvez obtenir une connexion en utilisant directement Ruby/ODBC, il ne devrait pas être difficile de l'utiliser avec Sequel.

Désolé je ne peux pas être plus d'aide. De plus, bien qu'il ne soit pas lié à votre problème actuel, vous devez utiliser l'option: db_type => 'mssql' pour l'appel Sequel.odbc.

+0

Salut Jeremy! Merci d'avoir pris le temps de répondre à cette question. J'ai essayé la connexion avec la dernière ActiveRecord, et apparemment cela fonctionne: ActiveRecord :: Base.establish_connection ({ : adaptateur => 'SQLServer', : mode => 'odbc', : dsn => 'Dev04', : nom d'utilisateur => 'uDev04', : password => 'pwdDev04' }) J'utilise activerecord avec rails 2.3.4 SQLServer-2000-2005 adaptateur 2.2.19, AFAICT. Malheureusement, AR ne m'aidera pas beaucoup (c'est un schéma hérité mal évolué), et Sequel ferait parfaitement le travail. Je tiens à aider à résoudre ce problème, mais je ne sais pas par où commencer. Des idées? –

+0

Vous pouvez essayer: Sequel.odbc ('Dev04',: user => 'uDev04',: password => 'pwdDev04') Je ne suis pas sûr que cela fonctionne, mais il vaut le coup. Si cela ne fonctionne pas, je peux jeter un oeil au code de l'adaptateur AR SQLServer pour voir comment il utilise différemment Ruby/ODBC. Pour être sûr, utilisez-vous la version 2.2.21 d'activeecord-sqlserver-adapter? –

+0

J'utilise activerecord-sqlserver-adaptateur 2.2.19 et rails-sqlserver-2000-2005-adaptateur 2.2.19 (pour autant que je sache, ce sont les dernières versions à ce jour), avec Rails 2.3.4 . –

1

Parfois, gratuit n'est pas sans coût.

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

La version 7.1 de TDS est correcte 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 en utilisant la version de SQL Server, pas la version TDS; et SQL Server 2008 n'est pas encore entièrement 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 commercial driver like this one from my employer qui a déjà traité une grande partie de la tête-éraflure. Obi: Je travaille pour OpenLink Software, mais ne bénéficie pas directement de quiconque choisit d'utiliser nos produits.

+0

Vous devez divulguer votre affiliation lorsque vous recommandez des produits commerciaux produits par votre employeur. –

Questions connexes