tiny_tds在第二次执行时失败了

时间:2011-10-26 10:14:03

标签: sql-server ruby windows tiny-tds

今天,tiny_tds突然不接受多个execute并返回:

C:\>ruby test_use.rb
one
two
C:/test_use.rb:15:in `execute': Attempt to initiate a new Adaptive Server operation with results pending (TinyTds::Error)
    from C:/test_use.rb:15

代码只是三个USE s:

require 'rubygems'
require 'yaml'
require 'fastercsv'
require 'tiny_tds'
require 'iconv'

CONFIG = YAML.load_file("config.yml")

client = TinyTds::Client.new(:username => CONFIG["db"]["username"], :password => CONFIG["db"]["password"], 
  :host => CONFIG["db"]["server"], :database => CONFIG["db"]["database"])

puts "one"
client.execute("USE DATAFEED")
puts "two"
client.execute("USE DATAFEED")
puts "three"
client.execute("USE DATAFEED")

有任何疑问是什么问题?我尝试重新启动Windows机器。

4 个答案:

答案 0 :(得分:4)

这是我如何做的一个例子。

results = $regcenter_db.execute("select top 10 * from events")
event_ids = results.collect { |i| i["event_id"] }
results.do    

答案 1 :(得分:1)

您必须使用do

终止执行

Client.execute("...").do

答案 2 :(得分:0)

您必须致电docancel。如果您正在执行某些操作,例如获取部分结果,并且您对执行do方法不感兴趣,则可以调用cancel来中止查询。

答案 3 :(得分:0)

根据GitHub上的documentation for TinyTds

重要的是要么从查询中返回数据,最有可能是使用#each方法,,要么在要求客户端执行另一个SQL批处理之前取消结果。如果不这样做会产生错误。

要取消查询,请使用cancel方法:

client.execute("USE DATAFEED").cancel