Показать сообщение отдельно
Старый 30.11.2022, 21:47   #6  
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. Хотя в трёшке тот же эффект.

Это норм или что-то где-то надо туда-сюда?