Pregunta

Tengo problemas para conectarme a una instalación de SQL Server 2005 desde esta aplicación Ruby muy simple:

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

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

El dev04 DSN apunta a mi entrada de archivo odbc.ini :

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

FreeTDS está instalado en odbcinst.ini y apunta a esta configuración en freetds.conf :

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

Esto funciona:

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

Y esto también lo hace:

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$

Sin embargo, cuando ejecuto ese script Ruby, recibo este error:

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

Entiendo que el error 'Error en la conexión del servidor de Adaptive' puede ocurrir debido a discrepancias en la versión del protocolo TDS. He revisado los registros y todos parecen estar usando la versión correcta (7.0), por lo que no sé por qué podría estar sucediendo esto.

¿Algún puntero?

¿Fue útil?

Solución

Soy el mantenedor de Sequel. Desafortunadamente, no tengo ninguna experiencia personal al usar Sequel para conectarme a MSSQL usando FreeTDS. Aunque sé que otras personas lo han usado con éxito.

Su mensaje de error indica un problema en la biblioteca de Ruby / ODBC subyacente, no en la propia Sequel. Si puede obtener una conexión trabajando directamente con Ruby / ODBC, no debería ser difícil hacer que funcione con Sequel.

Lo siento, no puedo ser de más ayuda.

Además, si bien no está relacionado con su problema actual, debe usar la opción: db_type = > 'mssql' para la llamada Sequel.odbc.

Otros consejos

A veces, gratis no es gratis.

La versión 7.0 de TDS era correcta para SQL Server 7.x, y en muchos casos se conectará con versiones posteriores de SQL Server, pero no admite todas las características o funciones de esas versiones posteriores.

La versión 7.1 de TDS es correcta para SQL Server 2000 (v8.x); 7.2 es correcto para SQL Server 2005 (v9.x); 7.3 es correcto para SQL Server 2008 (v10.x). Debido a cierta confusión en la documentación de Microsoft, generalmente se especifican en freetds.conf usando la versión de SQL Server, no la versión de TDS; y SQL Server 2008 no es totalmente compatible todavía; así que probaría con

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

O ... podría intentar usar un controlador comercial como este de mi empleador que ya ha manejado gran parte de los rasguños de cabeza. Si va por ese camino, le sugiero que también revise la documentación completa para el adaptador ODBC de Rails

ObDisclaimer: trabajo para OpenLink Software, pero no me beneficio directamente de que alguien elija usar nuestros productos.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top