Показать сообщение отдельно
Старый 25.01.2016, 10:15   #1  
abark is offline
abark
Участник
 
14 / 10 (1) +
Регистрация: 26.06.2013
Адрес: Волгоград
ODBCConnection и обработка deadlock
Добрый день!

Подскажите пожалуйста как делать обработку потенциальных дедлоков при работе с подключением к внешней базе данных через ODBC.
Есть подобный код:
X++:
LoginProperty          lp;
ODBCConnection         conn;
Statement              Statement;
str                     query;
ResultSet              rs;
counter                counter = 0;
;

    lp = new LoginProperty();
    lp.setDSN("SomeDB");
    conn = new ODBCConnection(lp);
    Statement = conn.createStatement();
    query = strfmt( @"exec [dbo].[SomeSP]"  );
    rs = Statement.executeQuery(query);
    while (rs.next())           // **** Тут иногда валится с ошибкой (1)
    {
        counter++;
    }
Он порой валится с ошибкой (1) вида:
X++:
    "" ("")
 .           .
При этом в хранимой процедуре в начале стоят SET NOCOUNT ON ; SET ANSI_WARNINGS OFF ;
И в единственном select все таблицы с хинтами (nolock), но все равно происходит deadlock как-то. Как его правильно отловить в вызове из Axapta ? что-нибудь наподобие
X++:
try {ttsbegin; ... ttscommit; } catch(Exception::Deadlock) { retry; }
для ODBC есть ?
__________________
Ax 3.0 SP5 FP2 kr2