我是 C# 的新手。
当我尝试捕捉这样的东西时:
try
{
connection.Open();
command.ExecuteNonQuery();
}
catch(SqlException ex)
{
MessageBox.Show("there was an issue!");
}
我如何知道问题是发生在 Open
还是 ExecuteNonQuery
?
如果我在 Try
中调用了一堆其他 non-SQL
东西怎么办?
我怎么知道哪个失败了?
SqlException
相对于常规 Exception
意味着什么?
如果我在 Try
block 中有这样的代码,SqlException
将如何处理非 SQL 相关错误?
最佳答案
您可以在 try block 之后添加多个 catch
try
{
connection.Open();
command.ExecuteNonQuery();
}
catch(SqlException ex)
{
MessageBox.Show("there was an issue!");
}
catch(Exception ex)
{
MessageBox.Show("there was another issue!");
}
这里的重要规则是向上捕获最具体的异常,向下捕获更一般的异常
如果我在 TRY 中调用了一堆其他非 SQL 东西怎么办? 我怎么知道哪个失败了?
这将基于操作抛出的异常。就像我说的那样,首先捕获最具体的异常,然后在下降时变得更一般。我建议查看 MSDN 文档,了解您认为可能引发异常的方法。本文档详细说明了在何种情况下方法会抛出哪些异常。
SQLEXCEPTION 相对于常规 EXCEPTION 意味着什么?
SQLException
是普通 Exception
类的扩展,仅在特定情况下抛出。
如果我在 TRY block 中有这样的代码,SQLEXCEPTION 将如何处理非 SQL 相关的错误?
因此,为了回答您的问题,您设置的 block 不会捕获任何不是 SQLException
或扩展 SQLException
的异常。
关于C# try catch 混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19970397/