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
Другие вопросы по тегам