代码之家  ›  专栏  ›  技术社区  ›  Carlos Villela

使用Ruby、ODBC和Freetds从Mac连接到MS SQL Server 2005

  •  1
  • Carlos Villela  · 技术社区  · 15 年前

    我无法从这个非常简单的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协议版本不一致,可能会出现“自适应服务器连接失败”错误。我检查了日志,它们似乎都使用了正确的版本(7.0),所以我完全不知道为什么会发生这种情况。

    有什么指针吗?

    2 回复  |  直到 10 年前
        1
  •  1
  •   Jeremy Evans    15 年前

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

    您的错误消息表明基础Ruby/ODBC库中存在问题,而不是Sequel本身。如果您可以直接使用ruby/odbc进行连接,那么使用sequel就不难了。

    对不起,我不能再帮你了。

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

        2
  •  1
  •   TallTed    10 年前

    有时候,免费不是没有成本的。

    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
    

    或者…你可以尝试使用 commercial driver like this one from my employer 这已经解决了很多头疼的问题。如果你走那条路,我建议你也回顾一下 full documentation for the Rails ODBC Adapter

    obdisclaimer:我为OpenLink软件工作,但不会直接受益于任何选择使用我们产品的人。