通过Actual Technologies ODBC驱动程序从Mac连接到SQL Server

时间:2010-11-03 18:29:24

标签: sql-server ruby macos odbc

有人使用Actual Technologies的ODBC driver从64位Mac OS X 10.6(Snow Leopard)成功连接到SQL Server?我对使用iODBC Unix驱动程序不感兴趣。

对于Ruby 1.8.7,我有:

  • dbi(0.4.5)
  • dbd-odbc(0.2.5)
  • ruby​​-odbc(0.99992)

这是我简单的Ruby脚本:

require 'rubygems'
require 'dbi'

db = DBI.connect('DBI:ODBC:MyDSN', 'user', 'password')
begin
  result = db.execute('SELECT name FROM sys.databases')
  while row = result.fetch do
    puts row.to_s
  end
ensure
  db.disconnect if db
end

我也尝试使用ActiveRecord:

  • activerecord(1.15.6)
  • activerecord-sqlserver-adapter(3.0.5)

脚本:

require 'rubygems'
gem 'activerecord'
require 'active_record'
require 'logger'

ActiveRecord::Base.logger = Logger.new(STDOUT)

ActiveRecord::Base.establish_connection( :adapter => 'sqlserver', :mode => 'odbc', :dsn => 'MyDSN', :username => 'user', :password => 'password' )

result = ActiveRecord::Base.connection.execute 'SELECT name FROM sys.databases'

while r = result.fetch_row puts r end

但是,在获取时,DBI和ActiveRecord示例都出现了分段错误:

/opt/local/lib/ruby/gems/1.8/gems/dbi-0.4.5/lib/dbd/odbc/statement.rb:43: [BUG] Segmentation fault
ruby 1.8.7 (2010-08-16 patchlevel 302) [i686-darwin10]
在Ruby 1.9.2中有更多的错误信息:

/Users/ejstembler/.rvm/gems/ruby-1.9.2-p0/gems/dbd-odbc-0.2.5/lib/dbd/odbc/statement.rb:41: [BUG] Segmentation fault
ruby 1.9.2p0 (2010-08-18 revision 29036) [x86_64-darwin10]

-- control frame ---------- c:0006 p:---- s:0022 b:0022 l:000021 d:000021 CFUNC :fetch c:0005 p:0014 s:0019 b:0018 l:000017 d:000017 METHOD /Users/ejstembler/.rvm/gems/ruby-1.9.2-p0/gems/dbd-odbc-0.2.5/lib/dbd/odbc/statement.rb:41 c:0004 p:0139 s:0014 b:0014 l:000013 d:000013 METHOD /Users/ejstembler/.rvm/gems/ruby-1.9.2-p0/gems/dbi-0.4.5/lib/dbi/handles/statement.rb:220 c:0003 p:0102 s:0009 b:0009 l:001588 d:0001e0 EVAL ss_dbi.rb:7 c:0002 p:---- s:0004 b:0004 l:000003 d:000003 FINISH

c:0001 p:0000 s:0002 b:0002 l:001588 d:001588 TOP

-- Ruby level backtrace information ---------------------------------------- ss_dbi.rb:7:in <main>' /Users/ejstembler/.rvm/gems/ruby-1.9.2-p0/gems/dbi-0.4.5/lib/dbi/handles/statement.rb:220:infetch' /Users/ejstembler/.rvm/gems/ruby-1.9.2-p0/gems/dbd-odbc-0.2.5/lib/dbd/odbc/statement.rb:41:in fetch' /Users/ejstembler/.rvm/gems/ruby-1.9.2-p0/gems/dbd-odbc-0.2.5/lib/dbd/odbc/statement.rb:41:infetch'

-- C level backtrace information -------------------------------------------

我不熟悉读取这种类型的错误转储,但是如果我猜测我会说fetch是最后调用的东西,它会调用C函数(CFUNC)。我不确定C函数是否是gem,Ruby库或ODBC驱动程序本身的一部分。

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

您是否看过Mac OS X上的OpenLink Rails ODBC AdapterODBC Driver for SQL Server哪些内容对使用Ruby on Rails有特定的改进,并且已在Mac OS X上进行过测试?

答案 1 :(得分:0)

你有没有想过这个?

我在Windows上使用Ruby-ODBC和ActiveRecord来查询自定义驱动程序:

    require "sinatra/activerecord"
    require "odbc"

我写了以下内容:

    maxwell = ODBC.connect("Maxwell")
    stmt = maxwell.run query

DSN(“Maxwell”)是全局配置的(在我的Ruby应用程序之外),我不需要指定驱动程序,因为这已经在odbc.ini中设置了。