Показать сообщение отдельно
Старый 08.08.2016, 10:39   #5  
Pandasama is offline
Pandasama
Участник
 
449 / 133 (5) +++++
Регистрация: 11.08.2014
Адрес: Барнаул
Цитата:
Сообщение от AndyD Посмотреть сообщение
оберните свои запросы в блок try/catch внутри T-SQL
Не помогло

Вот тестовый пример, аналогичный описываемой задаче:
X++:
public server static void testSQL()
{
    Set                                 permissionSet               = new Set(Types::Class);
    Connection                          connection;
    Statement                           statement;
    str                                 query;
    TestTable3798                       testTable; //test table (SaveDataPerCompany = No) with one field str[10] named Field1
    ;

    query += "BEGIN TRY \n";
    query += "BEGIN TRANSACTION; \n";
    query += "SELECT TOP 1  * FROM CustTable; \n";
    query += "INSERT INTO TESTTABLE3798 (Field1, RecId) VALUES ('test', 123456); \n" ;
    query += "SELECT TOP 1 * FROM SYSTEMSEQUENCES WHERE NAME = -1; \n"; //query with error
    query += "COMMIT TRANSACTION; \n";
    query += "END TRY \n";
    query += "BEGIN CATCH \n";
    query += "ROLLBACK TRANSACTION; \n";
    query += "THROW; \n";
    query += "END CATCH \n";
    
    connection = new Connection();
    statement = connection.createStatement();
    permissionSet.add(new SqlStatementExecutePermission(query));
    CodeAccessPermission::assertMultiple(permissionSet);
    statement.executeUpdate(query);
    CodeAccessPermission::revertAssert();
}
запрос получается вот такой
Код:
BEGIN TRY 
BEGIN TRANSACTION;
SELECT TOP 1 * FROM CustTable; 
INSERT INTO TESTTABLE3798 (Field1, RecId) VALUES ('test', 123456); 
SELECT TOP 1 * FROM SYSTEMSEQUENCES WHERE NAME = -1; 
COMMIT TRANSACTION; 
END TRY 
BEGIN CATCH 
ROLLBACK TRANSACTION; 
THROW;
END CATCH
валидацию он проходит, но в рантайме дает ошибку
Цитата:
(1 row(s) affected)

(1 row(s) affected)

(0 row(s) affected)
Msg 245, Level 16, State 1, Line 5
Conversion failed when converting the nvarchar value 'Event' to data type int.
в указанном выше X++ statement.updateQuery() выполняется без ошибки