tiny_tds не удалось при втором выполнении - PullRequest
1 голос
/ 26 октября 2011

Сегодня 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 ]

4 голосов
/ 13 января 2012

Вот пример того, как я это делаю.

results = $regcenter_db.execute("select top 10 * from events")
event_ids = results.collect { |i| i["event_id"] }
results.do    
1 голос
/ 27 октября 2011

Вы должны прекратить выполнение с помощью do:

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

0 голосов
/ 08 июня 2018

Согласно документации для TinyTds на GitHub:

Важно либо вернуть данные из запроса, скорее всего, с помощью метода #each, , либо отменить результаты, прежде чем просить клиента выполнить другой пакет SQL . Невыполнение этого условия приведет к ошибке.

Чтобы отменить запрос, используйте метод cancel:

client.execute("USE DATAFEED").cancel
0 голосов
/ 19 ноября 2016

Вы должны позвонить do ИЛИ cancel.Если вы делаете что-то вроде получения частичных результатов и не заинтересованы в выполнении метода do, вы можете вызвать cancel для отмены запроса.

...