C# 为什么捕捉块没有被触发?

C# 为什么捕捉块没有被触发?,c#,asp.net,exception,C#,Asp.net,Exception,我正在尝试将错误记录到文件中,但似乎无法在发生错误时运行catch块。下面是一个代码示例: try { cmd.ExecuteNonQuery(); } catch (MySQLException ex) { //run some logging code } finally { //clean up the resources } 问题是,当出现异常时,我从内置的Web服务器中得到一个错误,即它是一个未处理的异常

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

try  
{  
     cmd.ExecuteNonQuery();  
}  
catch (MySQLException ex)  
{   
     //run some logging code  
}  
finally  
{  
     //clean up the resources  
}  
问题是,当出现异常时,我从内置的Web服务器中得到一个错误,即它是一个未处理的异常。当我调试代码时,代码在异常处停止,然后继续到finally块。有人能在这里给我指出正确的方向吗?

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

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

更多信息请参见此:

ExecuteNonQuery()
引发类型为
SqlException
的异常

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

更多信息请参见此:


抛出的异常似乎不是类型为
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  
} 

抛出的异常似乎不是类型
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  
} 

  • 无效例外
  • SqlException
  • IOException
  • 无效操作例外
  • ObjectDisposedException

  • 无效例外
  • SqlException
  • IOException
  • 无效操作例外
  • ObjectDisposedException


可能这是一种不同于要求捕获的异常类型?该异常是否为
MySQLException
?或者您正在尝试在
finally
块中执行导致另一个异常的操作吗?@pst说了什么。用另一个
try…catch
包装它,并在调试时检查实际的异常..我已经编辑了你的标题。请参阅“”,其中的共识是“不,他们不应该”。更好的做法是没有捕获块:如果你不知道抛出的是什么,那么就不要捕获它。可能这是一种不同于要求捕获的异常类型?异常是否为
MySQLException
?或者您正在尝试在
finally
块中执行导致另一个异常的操作吗?@pst说了什么。用另一个
try…catch
包装它,并在调试时检查实际的异常..我已经编辑了你的标题。请看“”,其中的共识是“不,他们不应该”。更好的做法是不要设置捕捉块:如果你不知道抛出的是什么,那么就不要捕捉它。-1:感谢回答,但请不要在回答中发布.NET 1.1链接。读者会关注该链接中的链接,等等,然后陷入.NET 1.1-land。另外,是什么让你相信
cmd
SqlCommand
类型的呢?我感谢你的更正。我更新了答案中的链接。我对cmd的类型做了一个假设,因为他要求指示。我的方向是检查给定方法引发的异常类型。好的,向上投票,但请注意我是如何更新链接的:如果没有版本的链接存在,最好不要使用版本部分。另外,创建带有链接文章标题的链接也很好。这样,读者就可以决定是否点击链接。SqlXxxx仅适用于SQL server。你知道,还有其他数据库,他似乎在使用MySQL。因此,MySqlException是一个例外。阅读这里:-1:感谢您的回答,但请不要在回答中发布.NET1.1链接。读者会关注该链接中的链接,等等,然后陷入.NET 1.1-land。另外,是什么让你相信
cmd
SqlCommand
类型的呢?我感谢你的更正。我更新了答案中的链接。我对cmd的类型做了一个假设,因为他要求指示。我的方向是检查给定方法引发的异常类型。好的,向上投票,但请注意我是如何更新链接的:如果没有版本的链接存在,最好不要使用版本部分。另外,创建带有链接文章标题的链接也很好。这样,读者就可以决定是否点击链接。SqlXxxx仅适用于SQL server。你知道,还有其他数据库,他似乎在使用MySQL。因此,MySqlException是一个例外。请看这里: