Ligar para o MS SQL Server 2005 a partir do Mac usando Ruby, ODBC e FreeTDS
-
05-07-2019 - |
Pergunta
Estou tendo problemas para se conectar a um SQL Server 2005 instalar a partir deste muito simples aplicativo Ruby:
#!/usr/bin/env ruby
require 'rubygems'
require 'sequel'
Sequel.odbc('dev04')['select top 1 * from users'].all
Os dev04
DSN aponta para a minha entrada arquivo odbc.ini
:
[dev04]
Driver = FreeTDS
Description = ODBC connection via FreeTDS
Trace = 1
Servername = dev04
Database = Dev04
UID = uDev04
PWD = pwdDev04
FreeTDS
está instalado no odbcinst.ini e aponta para esta configuração no freetds.conf
:
[dev04]
host = hm602.mycompany.com
port = 1433
tds version = 7.0
Isso funciona:
carlos$ tsql -S dev04 -U uDev04 -P pwdDev04
locale is "en_GB.UTF-8"
locale charset is "UTF-8"
1> exit
carlos$
E o mesmo acontece com esta:
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 eu executo que Ruby roteiro, porém, eu recebo este erro:
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'
...
Eu entendo a 'conexão Adaptive Server falhou' erro pode ocorrer devido a versão discrepâncias protocolo TDS. Eu verifiquei os logs e todos eles parecem estar usando a versão correta (7,0), então eu estou em uma perda completa a respeito de porque isso poderia estar acontecendo.
Os ponteiros?
Solução
Eu sou o mantenedor Sequel. Infelizmente, eu não tenho nenhuma experiência pessoal usando Sequel para se conectar ao MSSQL usando FreeTDS. Eu sei que outras pessoas têm usado com sucesso no entanto.
A sua mensagem de erro indica um problema na biblioteca / ODBC Rubi subjacente, e não em si mesmo Sequel. Se você pode obter uma conexão trabalhando usando Ruby / ODBC diretamente, ele não deve ser difícil de fazê-lo funcionar com o Sequel.
Desculpe eu não posso ser de mais ajuda.
Além disso, enquanto ele não está relacionado com o problema atual, você deve usar o:. Db_type => 'mssql' opção para a chamada Sequel.odbc
Outras dicas
Às vezes, livre não é sem custo.
TDS Versão 7.0 foi correto para 7.x do SQL Server, e ele irá se conectar em muitos casos para versões posteriores do SQL Server -. Mas ele não suporta todos os recursos ou funcionalidade dessas versões posteriores
TDS Versão 7.1 está correto para o SQL Server 2000 (v8.x); 7.2 está correto para o SQL Server 2005 (v9.x); 7.3 está correto para o SQL Server 2008 (v10.x). Devido a alguma confusão na documentação da Microsoft, estes são geralmente especificado no freetds.conf usando a versão SQL Server, não a versão TDS; e SQL Server 2008 não é totalmente suportado ainda; então eu testar com
tds version = 7.1
tds version = 7.2
tds version = 8.0
tds version = 9.0
Ou ... você pode tentar usar um driver comercial como este do meu empregador que já tenha tratado muito da cabeça-arranhão. Se você fizer ir por esse caminho, eu sugiro que você também rever a documentação completa para o ODBC adaptador Rails
ObDisclaimer:. Eu trabalho para OpenLink Software, mas não se beneficiam diretamente de quem escolher para usar nossos produtos