C# 为什么捕捉块没有被触发?
我正在尝试将错误记录到文件中,但似乎无法在发生错误时运行catch块。下面是一个代码示例: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服务器中得到一个错误,即它是一个未处理的异常
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是一个例外。请看这里: