【发布时间】:2012-04-16 04:43:25
【问题描述】:
所以我在 Ruby 中对 MS SQL 数据库执行查询,一切都很好。我有 FreeTDS/ODBC 设置,我在笑。不知从何而来,我的一个查询出现了这个错误:
/home/jarrett/.rvm/gems/ruby-1.9.2-p318/gems/dbd-odbc-0.2.5/lib/dbd/odbc/statement.rb:41:in `fetch': negative string size (or size too big) (ArgumentError)
from /home/jarrett/.rvm/gems/ruby-1.9.2-p318/gems/dbd-odbc-0.2.5/lib/dbd/odbc/statement.rb:41:in `fetch'
from /home/jarrett/.rvm/gems/ruby-1.9.2-p318/gems/dbi-0.4.5/lib/dbi/handles/statement.rb:220:in `fetch'
什么?好的,所以其他查询很好,但由于某种原因,这个问题很糟糕。查询是“从 [Provider] 中选择 *”。很直接。查询在 MS SQL Server 上运行得很好。这个查询曾经在我用 Ruby + FreeTDS + ODBC 设置的另一台机器上运行。嗯..
然后我用这个快速制作一个 ruby 文件:
#!/usr/bin/env ruby
require 'dbi'
db = DBI.connect('dbi:ODBC:MYDB', 'blahblah', 'blahblah')
select = db.prepare('select * from [Provider]')
select.execute
while rec = select.fetch do
puts rec.to_s
end
db.disconnect
它太棒了。然后我只选择几列(而不是 *),如下所示:
#!/usr/bin/env ruby
require 'dbi'
db = DBI.connect('dbi:ODBC:MYDB', 'blahblah', 'blahblah')
select = db.prepare('select Address1, Address2 from [Provider]')
select.execute
while rec = select.fetch do
puts rec.to_s
end
db.disconnect
而且效果很好!因此,我将查询更改为仅选择单个列(在我的查询中仅使用大约 13 列),它工作正常。我数了一下表格的总列数,有103个。
所以,我想我很好奇:为什么这会对我产生影响? 103 列是否太多而无法处理?
我在 64 位 Debian 机器上运行,通过 VPN 连接到办公室(MS SQL Server 机器在办公室 LAN 上)。我第一次看到这样的错误。
有人有什么想法吗?
【问题讨论】:
-
一个名为“Provider”的表有 103 列?
-
@DavidBrabant 是的,这是正确的 - 抱歉,如果我不清楚
标签: ruby sql-server odbc dbi freetds