我在有两个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指令。
谢谢你们的回答。我已经做过一些事情,可以从重新抛出异常的信息中获取错误。
@gbn我也喜欢gbn的答案,但是我会坚持这个答案,因为这是最有效的答案,我在这里发布它,希望它对其他人也有用。
答案是在应用程序中使用事务。 如果在存储过程中未捕获到异常,则将在SqlException对象中获取原始编号。在应用程序中捕获原始异常之后,我编写以下代码
transaction.Rollback();
否则:
transaction.Commit();
它比我最初预期的要简单得多!
http://msdn.microsoft.com/zh- CN/library/system.data.sqlclient.sqltransaction.aspx