小编典典

SQL Server:使用原始异常号重新抛出异常

sql

我在有两个INSERT指令的存储过程中使用TRY CATCH块。

如果出现问题,则CATCH块负责回滚所做的所有更改,并且除一件事外,它都可以正常工作!

我的ASP.NET应用程序捕获的异常是一个SqlException,其编号为50000。这不是原始编号!(我期望的数字是2627)

在异常的Message属性中,我可以看到原始的异常编号和格式化的消息。

我如何获得原始的异常编号?

try
{
    // ... code
}
catch
(SqlException sqlException)
{
    switch (sqlException.Number)
    {
        // Name already exists
        case 2627:
            throw new ItemTypeNameAlreadyExistsException();

        // Some other error
        // As the exception number is 50000 it always ends here!!!!!!
        default:
            throw new ItemTypeException();
    }
}

现在,返回值已被使用。我想我可以使用输出参数来获取异常号,但这是一个好主意吗?

我该怎么办才能获得例外编号?谢谢

PS:这是必需的,因为我有两个INSERT指令。


阅读 184

收藏
2021-05-05

共1个答案

小编典典

谢谢你们的回答。我已经做过一些事情,可以从重新抛出异常的信息中获取错误。

@gbn我也喜欢gbn的答案,但是我会坚持这个答案,因为这是最有效的答案,我在这里发布它,希望它对其他人也有用。

答案是在应用程序中使用事务。
如果在存储过程中未捕获到异常,则将在SqlException对象中获取原始编号。在应用程序中捕获原始异常之后,我编写以下代码

transaction.Rollback();

否则:

transaction.Commit();

它比我最初预期的要简单得多!

http://msdn.microsoft.com/zh-
CN/library/system.data.sqlclient.sqltransaction.aspx

2021-05-05