TinyTDS: проверить, если запрос выполнен успешно
Я использую гем tiny_tds в проекте rails (работа с устаревшей базой данных MSSQL 2008)
Я выполняю следующий запрос:
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
Я тоже пробовал
update_comment_result.each
update_comment_result.return_code
который возвращается nil
а также
update_comment_result.each
update_comment_result.affected_rows
который возвращается -1
Запрос выполняется успешно, потому что изменение сделано в базе данных, так почему же ошибочные результаты?
Как я могу проверить, успешно ли выполнен запрос?
1 ответ
Решение
Когда вы вызываете метод 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