sql-server - 使用 Ruby、ODBC 和 FreeTDS 从 Mac 连接到 MS SQL Server 2005

标签 sql-server ruby database odbc unixodbc

我在从这个非常简单的 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'
...

我了解“Adaptive Server 连接失败”错误可能是由于 TDS 协议(protocol)版本差异引起的。我检查了日志,它们似乎都使用了正确的版本 (7.0),所以我完全不知道为什么会发生这种情况。

有什么建议吗?

最佳答案

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

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

抱歉,我不能提供更多帮助。

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

关于sql-server - 使用 Ruby、ODBC 和 FreeTDS 从 Mac 连接到 MS SQL Server 2005,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1401242/

相关文章:

java - 使用日期和时间创建日期时间

mysql - 使用MySql 8的Hibernate 5.4.1并非所有表都是自动创建的

database - 什么是 cassandra 模式来服务于这个查询?

sql-server - ";1"在 MS SQL 中调用存储过程后?

ruby - 使用 jemalloc 调试 sidekiq worker 内存泄漏

ruby - 在 Fixnum 的实例上定义方法

ruby-on-rails - 如何使方法应用于 ActiveRecord 对象的集合

c# - 从控制台应用程序或 SQLCLR 对象使用 ("Context Connection=true"调用函数时处理连接的最佳方法)

sql - SQL Server 中的 Case 语句

sql - 如何在SQL Server 2008中使用三元运算符?