【问题标题】:Why is the catch block not being triggered?为什么没有触发 catch 块?
【发布时间】:2013-03-07 01:57:09
【问题描述】:

我正在尝试将错误记录到文件中,但是当错误发生时我似乎无法运行 catch 块。下面是代码示例:

try  
{  
     cmd.ExecuteNonQuery();  
}  
catch (MySQLException ex)  
{   
     //run some logging code  
}  
finally  
{  
     //clean up the resources  
}  

问题是当出现异常时,我从内置的网络服务器中得到错误,这是一个未处理的异常。当我调试代码在异常处停止然后继续到 finally 块。有人可以在这里指出我正确的方向吗?

【问题讨论】:

  • 也许它是不同类型的异常而不是要求捕获的异常?
  • 异常是MySQLException吗?或者您是否尝试在导致另一个异常的 finally 块中执行某些操作?
  • @pst 说了什么。将其包装在另一个 try...catch 中,并在调试时检查实际异常..
  • 我已经编辑了你的标题。请参阅“Should questions include “tags” in their titles?”,其中的共识是“不,他们不应该”。
  • 更好的做法是让 no 捕获块:如果您不知道抛出了什么,就不要捕获它。

标签: c# asp.net exception


【解决方案1】:

ExecuteNonQuery() 抛出 SqlException 类型的异常。

所以我不确定MySQLException 是什么,但您需要了解SqlException

查看此以获得更多信息:

【讨论】:

  • -1:感谢您的回答,但请不要在答案中发布 .NET 1.1 链接。读者将跟随该链接等中的链接,并陷入 .NET 1.1-land 中。
  • 另外,是什么让你相信cmd 的类型是SqlCommand
  • 感谢您的更正。我更新了答案中的链接。我对 cmd 的类型做了一个假设,因为他正在请求方向。我的方向是检查给定方法抛出的异常类型。
  • 好的,赞成,但请注意我是如何更新您的链接的:如果没有版本的链接存在,您最好不要保留版本部分。此外,很高兴创建一个带有链接文章标题的链接。这样,读者就可以决定是否点击链接。
  • -1。 SqlXxxx 仅适用于 SQL 服务器。你知道,还有其他数据库,他似乎在使用 MySQL。因此MySqlException。在这里阅读:dev.mysql.com/doc/refman/5.0/es/…
【解决方案2】:

似乎抛出的异常不是MySQLException 类型或从它派生的任何异常。所以 catch 块永远不会捕获它,finally 块直接执行!

要检查引发了哪种异常,请将代码修改为:

try  
{  
   cmd.ExecuteNonQuery();  
}  
catch (MySQLException ex)  
{   
   //run some logging code  
}  
catch (Exception ex)
{
   // any other exception will be handled here
}
finally  
{  
   //clean up the resources  
} 

【讨论】:

    【解决方案3】:

    That method can throw different types of exceptions

    • InvalidCastException
    • SqlException
    • IOException
    • InvalidOperationException
    • ObjectDisposedException

    【讨论】:

      猜你喜欢
      • 2017-03-15
      • 1970-01-01
      • 2013-03-27
      • 2021-06-18
      • 1970-01-01
      • 1970-01-01
      • 2021-05-23
      • 2021-06-21
      • 2019-02-19
      相关资源
      最近更新 更多