2011-10-26 45 views
1

今天,tiny_tds突然不接受多个execute返回:tiny_tds未能在第二个执行

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机器。

回答

1

你必须终止与do的执行:

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

+3

请注意该语法。如果你尝试了todo'results = client.execute(“...”)。do',你会得到受影响的行数而不是结果。我一直在做'results = client.execute(“...”)',稍后再调用client.do。 – jspooner

4

下面是我如何做到这一点的例子。

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

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

相关问题