C# try catch 混淆

标签 c# sqlexception

我是 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 类的扩展,仅在特定情况下抛出。

SqlException

如果我在 TRY block 中有这样的代码,SQLEXCEPTION 将如何处理非 SQL 相关的错误?

因此,为了回答您的问题,您设置的 block 不会捕获任何不是 SQLException 或扩展 SQLException 的异常。

关于C# try catch 混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19970397/

相关文章:

c# - WPF:在没有清除/添加的情况下替换数据绑定(bind)集合内容

java - 验证结果集中的 JTextField 数据

java.sql.SQLException : No value specified for parameter 2 异常

java.sql.SQLException : Invalid operation for forward only resultset : isLast

java - 获取 TDS 驱动程序 - java.lang.NullPointerException。这个异常不一致

c# - 通过 ref : cannot convert from 'Foo' to 'ref IFoo' 传递实现

c# - 如何使用方法语法重写这一行?

c# - 将BackgroundWorker转换为具有模态显示的Task.Run

c# - 为什么简单的select会超时

c# - 对存储库模式构造函数的困惑