从这个非常简单的Ruby应用程序连接到SQL Server 2005安装时遇到了问题:

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

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

dev04 DSN指向我的 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协议版本差异,可能会发生'Adaptive Server连接失败'错误。我检查了日志,他们似乎都使用了正确的版本(7.0),所以我完全不知道为什么会发生这种情况。

任何指针?

有帮助吗?

解决方案

我是续集维护者。不幸的是,我没有使用Sequel使用FreeTDS连接到MSSQL的任何个人经验。我知道其他人已成功使用它了。

您的错误消息表明基础Ruby / ODBC库中存在问题,而不是Sequel本身。如果你可以直接使用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文档中的一些混淆,这些通常使用SQL Server版本而不是TDS版本在freetds.conf中指定;并且还没有完全支持SQL Server 2008;所以我用

进行测试
tds version = 7.1
tds version = 7.2
tds version = 8.0
tds version = 9.0

或者......您可以尝试使用商业驱动程序像我这样的雇主,已经处理了很多令人头疼的问题。如果你这样做,我建议你也查看 Rails ODBC Adapter的完整文档

ObDisclaimer:我为OpenLink Software工作,但不会直接从任何选择使用我们产品的人那里获益。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top