У меня возникла проблема с вызовом базы данных, который вызывает AccessViolationException
при вызове ExecuteNonQuery()
. Вызов заключен в блок try-catch
но исключение никогда не попадает. Вместо этого я получаю запись об этом в журнале событий Windows. Есть ли способ уловить это исключение в коде?
IDbCommand cmd = ...
cmd.CommandText = "...";
try
{
var results = command.ExecuteNonQuery();
}
catch (Exception ex)
{
Console.Writeline("Caught exception: " + ex.Message);
}
ExecuteNonQuery()
может генерировать AccessViolationException
если базовый драйвер сбой в основном режиме. Начиная с.NET Framework 4, управляемый код больше не ловит эти типы исключений в блоках catch. Вы можете прочитать об этом здесь.
Решение состоит в том, чтобы установить <legacyCorruptedStateExceptionsPolicy>
включенным элементом в true в App.config или применить атрибут [System.Runtime.ExceptionServices.HandleProcessCorruptedStateExceptionsAttribute]
к методу, содержащему блок try-catch.