Подключение к MS SQL Server 2005 с Mac с использованием Ruby, ODBC и FreeTDS - PullRequest
1 голос
/ 09 сентября 2009

У меня проблемы с подключением к установке SQL Server 2005 из этого очень простого приложения на Ruby:

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

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

DSN dev04 указывает на мою odbc.ini запись в файле:

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

FreeTDS установлен в odbcinst.ini и указывает на эту конфигурацию в freetds.conf:

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

Это работает:

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

И вот так:

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$

Когда я запускаю этот скрипт на Ruby, я получаю эту ошибку:

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

Я понимаю, что ошибка «Ошибка подключения адаптивного сервера» может возникать из-за несоответствия версий протокола TDS. Я проверил журналы, и все они, кажется, используют правильную версию (7.0), поэтому я совершенно не понимаю, почему это может произойти.

Есть указатели?

Ответы [ 2 ]

1 голос
/ 10 июня 2010

Иногда бесплатно не бесплатно.

TDS версии 7.0 была верна для SQL Server 7.x, и во многих случаях она будет подключаться к более поздним версиям SQL Server - но она не поддерживает все функции или функциональные возможности этих более поздних версий.

Версия TDS 7.1 подходит для SQL Server 2000 (v8.x); 7.2 подходит для SQL Server 2005 (v9.x); 7.3 подходит для SQL Server 2008 (v10.x). Из-за некоторой путаницы в документации Microsoft они обычно указываются в файле freetds.conf с использованием версии SQL Server, а не версии TDS; и SQL Server 2008 еще не полностью поддерживается; так что я бы проверить с

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

Или ... вы можете попробовать использовать коммерческий драйвер, подобный этому, от моего работодателя , который уже справился с большей частью царапин на голове. Если вы пойдете по этому пути, я бы посоветовал вам также просмотреть полную документацию для Rails ODBC Adapter

ObDisclaimer: я работаю на программное обеспечение OpenLink, но напрямую не извлекаю выгоду из того, что кто-то решит использовать наши продукты.

1 голос
/ 10 сентября 2009

Я ведущий Сиквела. К сожалению, у меня нет личного опыта использования Sequel для подключения к MSSQL с использованием FreeTDS. Я знаю, что другие люди успешно использовали его, хотя.

Ваше сообщение об ошибке указывает на проблему в базовой библиотеке Ruby / ODBC, а не в самом сиквеле. Если вы можете установить соединение, работающее с использованием Ruby / ODBC напрямую, не составит труда заставить его работать с Sequel.

Извините, я не могу больше помочь.

Кроме того, хотя это не связано с вашей текущей проблемой, вы должны использовать параметр: db_type => 'mssql' для вызова Sequel.odbc.

...