2015-02-16 1 views
0

Я использую tiny_tds камень в проекте рельсы (работа с унаследованным MSSQL базы данных 2008)TinyTDS: Чек, если запрос преуспели

Я выполнить следующий запрос:

update_comment_result = self.get_pmi_client.execute("UPDATE UECOMCLI SET COMMENT = '" + params[:comment] + "' " + 
     "WHERE ECKTSOC = '" + params[:lcktsoc] + "' AND ECKTNUMERO = '" + params[:lcktnumero] + "' AND ECKTINDICE = '" + params[:lcktpsf] + "' \n" + 
     "IF @@ROWCOUNT = 0 \n 
     INSERT INTO UECOMCLI (ECKTSOC, ECKTNUMERO, ECKTINDICE, COMMENT) VALUES ('" + params[:lcktsoc] + "', '" + params[:lcktnumero] + "', '" + params[:lcktpsf] + "', '" + params[:comment] + "')") 

После этого, я не могу чтобы выяснить, был ли запрос выполнен или нет. Я попытался с помощью:

update_comment_result.affected_rows 

который возвращает -1

Я также попытался

который возвращает nil

и

update_comment_result.each 
update_comment_result.affected_rows 

, который возвращает -1

Запрос успешно завершен, потому что внесение изменений происходит в базе данных, так почему же ошибочные результаты?

Как проверить, удалось ли выполнить запрос?

ответ

0

Когда вы вызываете метод 'execute', ваш sql фактически не запускается. TinyTDS отправляет его на сервер sql только тогда, когда вы начинаете манипулировать результатами, и если есть ошибка, вы можете поймать его

res = Client.Execute('sql script') 
begin 
    res.entries #now sql script is being sent to the sql server 
rescue => e 
    puts e 
end