【问题标题】:ExecuteNonQuery() exception not caught by try-catchtry-catch 未捕获到 ExecuteNonQuery() 异常
【发布时间】:2014-12-09 16:05:55
【问题描述】:

当我调用ExecuteNonQuery() 时,我遇到了一个引发AccessViolationException 的数据库调用问题。该调用包含在 try-catch 块中,但从未捕获到异常。相反,我在 Windows 事件日志中获得了有关它的条目。有没有办法在代码中捕获这个异常?

IDbCommand cmd = ...
cmd.CommandText = "...";
try
{
    var results = command.ExecuteNonQuery();
}
catch (Exception ex)
{
    Console.Writeline("Caught exception: " + ex.Message);
}

【问题讨论】:

    标签: c# exception try-catch sybase access-violation


    【解决方案1】:

    如果底层驱动程序在本机模式下崩溃,ExecuteNonQuery() 可以抛出 AccessViolationException。从 .NET Framework 4 开始,托管代码不再在 catch 块中捕获这些类型的异常。你可以阅读更多关于这个here的信息。

    解决方案是在App.config中将<legacyCorruptedStateExceptionsPolicy>elementenabled属性设置为true,或者应用[System.Runtime.ExceptionServices.HandleProcessCorruptedStateExceptionsAttribute]@987654323 @ 指向包含 try-catch 块的方法。

    【讨论】:

    • 天哪,谢谢你,我不知道。我的公司正在慢慢地将代码从 3.5 移植到 4,所以我们很可能会遇到这个问题。另一方面,什么会导致司机崩溃?
    • 非托管驱动程序代码中的一般错误(内存泄漏等),如果您使用的是旧驱动程序,这种情况尤其可能发生。
    猜你喜欢
    • 1970-01-01
    • 2017-11-09
    • 1970-01-01
    • 1970-01-01
    • 2020-02-28
    • 1970-01-01
    • 2015-06-21
    • 2011-05-27
    • 1970-01-01
    相关资源
    最近更新 更多