Подключение к MS SQL Server 2005 с Mac с использованием Ruby, ODBC и FreeTDS
-
05-07-2019 - |
Вопрос
У меня проблемы с подключением к установке 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), поэтому я совершенно не понимаю, почему это может произойти.
Есть указатели?
Решение
Я поддерживаю продолжение. К сожалению, у меня нет личного опыта использования Sequel для подключения к MSSQL с использованием FreeTDS. Я знаю, что другие люди успешно использовали его, хотя.
Ваше сообщение об ошибке указывает на проблему в базовой библиотеке Ruby / ODBC, а не в самом сиквеле. Если вы можете установить соединение, работающее с использованием Ruby / ODBC напрямую, не составит труда заставить его работать с Sequel.
Извините, я не могу больше помочь.
Кроме того, хотя это не связано с вашей текущей проблемой, вы должны использовать опцию: db_type = > 'mssql' для вызова Sequel.odbc.
Другие советы
Иногда бесплатно не бесплатно.
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, но напрямую не извлекаю выгоду из того, что кто-то решил использовать наши продукты.