Domanda

Ho problemi con la connessione a un'installazione di SQL Server 2005 da questa semplicissima app Ruby:

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

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

Il DSN dev04 punta alla voce del mio odbc.ini :

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

FreeTDS è installato in odbcinst.ini e punta a questa configurazione in freetds.conf :

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

Funziona:

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

E così fa:

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$

Quando eseguo quello script Ruby, però, ottengo questo errore:

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'
...

Comprendo che l'errore "Connessione al server adattivo non riuscita" può verificarsi a causa di discrepanze nella versione del protocollo TDS. Ho controllato i registri e sembra che tutti stiano utilizzando la versione corretta (7.0), quindi non riesco a capire perché questo potrebbe accadere.

Qualche puntatore?

È stato utile?

Soluzione

Sono il manutentore del sequel. Sfortunatamente, non ho alcuna esperienza personale con Sequel per connettermi a MSSQL usando FreeTDS. So che altre persone lo hanno usato con successo.

Il tuo messaggio di errore indica un problema nella libreria Ruby / ODBC sottostante, non nello stesso Sequel. Se riesci a far funzionare una connessione utilizzando Ruby / ODBC direttamente, non dovrebbe essere difficile farlo funzionare con Sequel.

Mi dispiace non poter essere più di aiuto.

Inoltre, sebbene non sia correlato al problema attuale, è necessario utilizzare l'opzione: db_type = > 'mssql' per la chiamata Sequel.odbc.

Altri suggerimenti

A volte, gratuitamente non è senza costi.

TDS Versione 7.0 era corretta per SQL Server 7.x e in molti casi si connetterà alle versioni successive di SQL Server, ma non supporta tutte le funzionalità o funzionalità di quelle versioni successive.

TDS Versione 7.1 è corretta per SQL Server 2000 (v8.x); 7.2 è corretto per SQL Server 2005 (v9.x); 7.3 è corretto per SQL Server 2008 (v10.x). A causa di un po 'di confusione nella documentazione di Microsoft, questi sono generalmente specificati in freetds.conf utilizzando la versione di SQL Server, non la versione di TDS; e SQL Server 2008 non è ancora completamente supportato; quindi testerei con

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

Oppure ... potresti provare a utilizzare un driver commerciale come questo dal mio datore di lavoro che ha già gestito gran parte del problema. Se segui questa strada, ti suggerisco di consultare anche la documentazione completa per l'adattatore ODBC Rails

Dichiarazione di non responsabilità: lavoro per il software OpenLink, ma non traggo vantaggio direttamente da chiunque scelga di utilizzare i nostri prodotti.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top