将 sqlexception 抛给使用常规异常的调用方法?

Throw sqlexception to calling method that uses regular exception?

我正在尝试捕获特定的 SqlException 515(无法将值 NULL 插入列中),并且我无法在实际 INSERT 之前预先检查该值。我只能捕获错误并确定它是什么错误。

在接下来的执行中,alert() 可以显示这些消息:某处有一个空值(来自 SqlException 515)或一般错误,表示出了点问题。

在这种情况下,我知道我可以创建并抛出自定义异常错误,但我只想使用此处可用的内容,因为 SqlException 将捕获确切的错误。

此外,这两种方法在两个不同的 类 中,我只想在 Insert() 方法所在的位置包含 System.Data.SqlClient

最后,我可以使用常规的 System.Exceptionsubstring 方法来搜索特定的字符串。不过应该有更好的办法吧。

这是我的伪代码:

public void InsertNewCar()
{
    try
    {
        Car myCar = new Car();
        myCar.Insert();
    }
    catch (Exception ex)
    {
        alert(msg); //Alerts the user: "Something missing" or "generic error"
    }
}

public void Insert()
{
    try
    {
        SqlHelper.ExecuteNonQuery(ConnString, CommandType.Text, sqlInsert);
    }
    catch (SqlException ex)
    {
        if (ex.Number == 515)
        {
            //throw exception specifying that something's missing in the INSERT
        }
        else
        {
            throw ex;  //throw ex that will be interpreted as a generic error.
        }
    }
}

我的问题是:一旦我捕获了 SqlException 515,我能用它做什么?一旦我抛出它,我就无法检查 InsertNewCar().

内的错误编号

我可以有 Insert() return 一个值,但是这样就不会抛出异常。而且我不想使用 ref 关键字。

谢谢。

您可以重新抛出它,但有一个特定的其他例外:

throw new SomethingMissingException("Some guiding text", ex /*the original exception*/);

这样,您就可以在其他地方以更通用的方式处理它。另外,不要忘记将原始异常添加到您抛出的异常中。有时间可能会派上用场。