Исключение ExecuteNonQuery () не перехвачено try-catch

1

У меня возникла проблема с вызовом базы данных, который вызывает AccessViolationException при вызове ExecuteNonQuery(). Вызов заключен в блок try-catch но исключение никогда не попадает. Вместо этого я получаю запись об этом в журнале событий Windows. Есть ли способ уловить это исключение в коде?

IDbCommand cmd = ...
cmd.CommandText = "...";
try
{
    var results = command.ExecuteNonQuery();
}
catch (Exception ex)
{
    Console.Writeline("Caught exception: " + ex.Message);
}
Теги:
exception
try-catch
sybase
access-violation

1 ответ

7
Лучший ответ

ExecuteNonQuery() может генерировать AccessViolationException если базовый драйвер сбой в основном режиме. Начиная с.NET Framework 4, управляемый код больше не ловит эти типы исключений в блоках catch. Вы можете прочитать об этом здесь.

Решение состоит в том, чтобы установить <legacyCorruptedStateExceptionsPolicy> включенным элементом в true в App.config или применить атрибут [System.Runtime.ExceptionServices.HandleProcessCorruptedStateExceptionsAttribute] к методу, содержащему блок try-catch.

  • 0
    Святое дерьмо, спасибо за это, я понятия не имел. Моя компания медленно переносит код с 3,5 на 4, поэтому мы, скорее всего, столкнемся с этой проблемой. С другой стороны, что может привести к сбою драйвера?
  • 0
    Ошибки в неуправляемом коде драйвера (утечки памяти и т. Д.) В целом, что особенно вероятно, если вы используете старые драйверы.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню