【问题标题】:ruby+odbc+freetds MSSQL error negative string sizeruby+odbc+freetds MSSQL错误负字符串大小
【发布时间】: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


【解决方案1】:

dbi + dbd-odbc 已经很老了,而且似乎不是“最新的”。

你应该试试 TinyTDS,它直接为 ruby​​ 实现了 TDS 协议:

https://github.com/rails-sqlserver/tiny_tds

【讨论】:

  • 嗯..我得去看看。谢谢@克劳斯
猜你喜欢
  • 2017-05-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-05
  • 1970-01-01
  • 1970-01-01
  • 2021-07-24
  • 2015-04-06
相关资源
最近更新 更多