08.08.2016, 06:43 | #1 |
Участник
|
Statement, запрос (несколько) с транзакцией
Товарищи, имею нижеописанную проблему.
Есть sql-запрос, который я вызываю из Ax обычным способом (Connection, Statement) Запрос состоит из трех частей, завернутых в одну транзакцию (транзакцию внутри запроса, через SQL-операторы BEGIN TRANSACTION, COMMIT TRANSACTION) - 1я часть это некоторый SELECT, потом некоторый INSERT, и третья - некоторый UPDATE. Если я выполняю запрос из Management Studio, я получаю в ответ сообщения вроде Цитата:
1 row affected;
2000 row affected; 3 row affected; Цитата:
1 row affected;
2000 row affected; ошибка такая-то Однако, когда я вызываю запрос из Ax с помощью Statement.executeUpdate(query) то в случае наличия ошибки в третьей (или во второй) части запроса - я об этом никак не узнаю. executeUpdate возвращает 0, getLastError, getLastErrorText - возвращают 0, будто бы операция успешно выполнена (т.к. успешно выполнился первый запрос в транзакции). Можно ли как-то в такой ситуации получить из Statement корректный отчет о выполнении запроса или добиться, чтобы он кидал ошибку в такой ситуации? Рабочим сейчас является следующий вариант: X++: Connection.ttsbegin() Statement.executeUpdate(query1); Statement.executeUpdate(query2); Statement.executeUpdate(query3); Connection.ttsCommit() Текст запроса разбит на 3 части, каждая из который вызывается отдельно внутри транзакции, организованной классом Connection. Если в одной из частей запроса происходит ошибка, то ttsCommit не вызывается - и все три запроса откатываются. Но у этого подхода есть один крупный недостаток: т.к. запросы выполняются отдельно, то, например, в третьем запросе я не вижу переменных, которые я DECLARE в первой части. |
|
Теги |
error, executeupdate, sql, statement, transact sql, transaction |
|
|