1

我无法从这个非常简单的 Ruby 应用程序连接到 SQL Server 2005 安装:

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

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

dev04DSN 指向我的文件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),所以我完全不知道为什么会发生这种情况。

任何指针?

4

2 回答 2

1

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

您的错误消息表明底层 Ruby/ODBC 库中存在问题,而不是 Sequel 本身。如果您可以直接使用 Ruby/ODBC 建立连接,那么使用 Sequel 应该不难。

抱歉,我无法提供更多帮助。

此外,虽然它与您当前的问题无关,但您应该在 Sequel.odbc 调用中使用 :db_type=>'mssql' 选项。

于 2009-09-10T19:02:48.240 回答
1

有时,免费并非没有成本。

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 适配器的完整文档

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

于 2010-06-10T16:37:39.683 回答