将 sqlexception 抛给使用常规异常的调用方法?
Throw sqlexception to calling method that uses regular exception?
我正在尝试捕获特定的 SqlException
515(无法将值 NULL 插入列中),并且我无法在实际 INSERT
之前预先检查该值。我只能捕获错误并确定它是什么错误。
在接下来的执行中,alert()
可以显示这些消息:某处有一个空值(来自 SqlException
515)或一般错误,表示出了点问题。
在这种情况下,我知道我可以创建并抛出自定义异常错误,但我只想使用此处可用的内容,因为 SqlException
将捕获确切的错误。
此外,这两种方法在两个不同的 类 中,我只想在 Insert()
方法所在的位置包含 System.Data.SqlClient
。
最后,我可以使用常规的 System.Exception
和 substring
方法来搜索特定的字符串。不过应该有更好的办法吧。
这是我的伪代码:
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*/);
这样,您就可以在其他地方以更通用的方式处理它。另外,不要忘记将原始异常添加到您抛出的异常中。有时间可能会派上用场。
我正在尝试捕获特定的 SqlException
515(无法将值 NULL 插入列中),并且我无法在实际 INSERT
之前预先检查该值。我只能捕获错误并确定它是什么错误。
在接下来的执行中,alert()
可以显示这些消息:某处有一个空值(来自 SqlException
515)或一般错误,表示出了点问题。
在这种情况下,我知道我可以创建并抛出自定义异常错误,但我只想使用此处可用的内容,因为 SqlException
将捕获确切的错误。
此外,这两种方法在两个不同的 类 中,我只想在 Insert()
方法所在的位置包含 System.Data.SqlClient
。
最后,我可以使用常规的 System.Exception
和 substring
方法来搜索特定的字符串。不过应该有更好的办法吧。
这是我的伪代码:
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*/);
这样,您就可以在其他地方以更通用的方式处理它。另外,不要忘记将原始异常添加到您抛出的异常中。有时间可能会派上用场。