2015-08-07 12 views
1

Каков наилучший способ поймать исключение блокировки таблицы с помощью ado.net и iAnywhere.Data.SqlAnywhere.EF6? Моя проблема заключается в том, что command.ExecuteNonQuery вызывает сообщение SAException, в котором содержится сообщение о том, что пользователь заблокировал все строки в таблице.Исключить блокировку блокировки таблицы для sql в любом месте ado.net

Проблема в том, что она является общей SAException, а не конкретной, такой как SATableLockException, что было бы хорошо.

Теперь вопрос: как обнаружить без использования сообщения об ошибке, что ошибка является исключением блокировки таблицы?

спасибо!

+0

Глядя на SQL Anywhere 16 NET ссылки API я не могу найти SATableLockException, поэтому я не уверен, можно ли обнаружить ошибку, не глядя на список SAError свойства Errors класса SAException. – tzup

ответ

0

Хорошо, я нашел решение для этого. Я просто бросить исключение SAException и userd свойство Error-Code (спасибо @tzup):

Пример:

try 
{ 
    // Maybe some sa-exception occurse 
} 
catch (Exception ex) 
{ 
    if (ex is iAnywhere.Data.SQLAnywhere.SAException) 
    { 
     var saException = (iAnywhere.Data.SQLAnywhere.SAException)ex; 

     // Only catch table locks 
     if (saException.NativeError == -210 || saException.ErrorCode == -210 
      || saException.NativeError == -1281 || saException.ErrorCode == -1281) 
     { 
      // Table lock here! 
     } 
    } 
    else { // do some thing else... } 
}