windows tiny_tds 在第二次执行时失败

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/7901306/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-09-15 18:21:35  来源:igfitidea点击:

tiny_tds failed at the second execute

sql-serverrubywindowstiny-tds

提问by ohho

Today, tiny_tds suddenly does not accept more than one executeand returns:

今天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

The code is simply as three USEs:

代码很简单,就是三个USE

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")

Any clue what is the problem? I tried rebooting the Windows machine already.

任何线索是什么问题?我已经尝试重新启动 Windows 机器。

采纳答案by Klaus

You have to terminate the execute with a do:

您必须使用以下命令终止执行do

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

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

回答by jspooner

Here is an example of how I do it.

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

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

回答by Arnold Roa

You have to call doOR cancel. If you are doing something like getting a partial results, and you are not interested in execute the domethod you can call cancelto abort the query.

您必须致电doOR cancel。如果您正在执行诸如获取部分结果之类的操作,并且您对执行do可以调用cancel以中止查询的方法不感兴趣。

回答by Aweston

According to the documentation for TinyTdson GitHub:

根据GitHub 上TinyTds文档

It is important that you either return the data from the query, most likely with the #each method, or that you cancel the results before asking the client to execute another SQL batch. Failing to do so will yield an error.

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

To cancel the query, use the cancelmethod:

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

client.execute("USE DATAFEED").cancel