AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 08.08.2016, 06:43   #1  
Pandasama is offline
Pandasama
Участник
 
457 / 137 (5) +++++
Регистрация: 11.08.2014
Адрес: Барнаул
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()
Из запроса убраны операторы "BEGIN TRANSACTION", "COMMIT TRANSACTION"
Текст запроса разбит на 3 части, каждая из который вызывается отдельно внутри транзакции, организованной классом Connection. Если в одной из частей запроса происходит ошибка, то ttsCommit не вызывается - и все три запроса откатываются.

Но у этого подхода есть один крупный недостаток: т.к. запросы выполняются отдельно, то, например, в третьем запросе я не вижу переменных, которые я DECLARE в первой части.
Теги
error, executeupdate, sql, statement, transact sql, transaction

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
dynamicsaxhints: Select statement on field Blog bot DAX Blogs 0 22.03.2016 09:11
emeadaxsupport: AX 2012 R3 for Retail - Clear Statement Greyed Out Blog bot DAX Blogs 0 01.05.2015 20:16
emeadaxsupport: Using Post Inventory along with Calculate and Post Statement in AX 2012 Retail Blog bot DAX Blogs 0 10.03.2015 02:16
emeadaxsupport: Oversettlement error when posting a Retail statement in AX 2012 R2 Blog bot DAX Blogs 0 27.09.2013 06:16
dynamicsaxtraining: Select statement patterns Blog bot DAX Blogs 10 20.08.2010 14:01

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 09:01.