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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 30.11.2022, 21:47   #1  
dim-gin is offline
dim-gin
Участник
 
41 / 30 (2) +++
Регистрация: 15.04.2014
Адрес: СПб
Sorry, подниму здесь простой вопрос, чтобы не создавать новую тему.

Недавно обнаружил, что Statement.executeUpdate не возвращает ничего для простого update. Хотя в документации про return value сказано "An updated row count; otherwise, 0 (zero) for SQL statements that return nothing."

X++:
server static void test()
{
    ResultSet   rs;
    str         sQuery;
    int         qtyUpdated;
    ;

    // так, параметры вывода сообщений
    sQuery = "SELECT CASE WHEN (512 & @@OPTIONS) = 512 THEN 'ON' ELSE 'OFF' END AS a1";
    new SQLStatementExecutePermission(sQuery).assert();
    rs = new Connection().createStatement().executeQuery(sQuery);
    if (rs.next())
        info(rs.getString(1));
    CodeAccessPermission::revertAssert();

    sQuery = "update [dbo].[TestTbl] set RecVersion = RecVersion+1;";
    new SQLStatementExecutePermission(sQuery).assert();
    // проверим, что никто не грохнул запись, пока мы мялись, как школьники у борделя
    qtyUpdated = new Connection().createStatement().executeUpdate(sQuery);
    info(int2str(qtyUpdated));
    CodeAccessPermission::revertAssert();
}
При этом фактическое обновление данных происходит, и транзакция фиксируется.
DAX2009 на ss2012r2, всё стоковое с последними хотфиксами и kb. Хотя в трёшке тот же эффект.

Это норм или что-то где-то надо туда-сюда?
Старый 01.12.2022, 01:35   #2  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,715 / 1204 (44) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Цитата:
Сообщение от dim-gin Посмотреть сообщение
Это норм или что-то где-то надо туда-сюда?
Это норм. Документация в этой части не корректная.

То число, которое возвращает executeUpdate() - это признак успеха или ошибки

0 - выполнено успешно
число - произошла ошибка

Собственно, это же работа через ODBC, а драйвер ODBC просто не умеет возвращать количество обработанных строк. Вне зависимости от версии Axapta
__________________
- Может, я как-то неправильно живу?!
- Отчего же? Правильно. Только зря...
За это сообщение автора поблагодарили: dim-gin (1), Logger (3).
Теги
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, время: 21:04.