|
![]() |
#1 |
Участник
|
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. Хотя в трёшке тот же эффект. Это норм или что-то где-то надо туда-сюда? |
|
![]() |
#2 |
Участник
|
Это норм. Документация в этой части не корректная.
То число, которое возвращает executeUpdate() - это признак успеха или ошибки 0 - выполнено успешно число - произошла ошибка Собственно, это же работа через ODBC, а драйвер ODBC просто не умеет возвращать количество обработанных строк. Вне зависимости от версии Axapta
__________________
- Может, я как-то неправильно живу?! - Отчего же? Правильно. Только зря... |
|
|
За это сообщение автора поблагодарили: dim-gin (1), Logger (3). |
Теги |
error, executeupdate, sql, statement, transact sql, transaction |
|
|