回答

收藏

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

技术问答 技术问答 63 人阅读 | 0 人回复 | 2023-09-13

我在有两个INSERT指令的存储过程中使用TRY CATCH块。
6 I. t+ m# U. x如果出现问题,则CATCH块负责回滚所做的所有更改,并且除一件事外,它都可以正常工作!
  \9 R2 k2 N" m# ~2 q我的ASP.NET应用程序捕获的异常是一个SqlException,其编号为50000。这不是原始编号!(我期望的数字是2627)9 d# A5 j1 e9 l/ R0 T, k1 [+ s
在异常的Message属性中,我可以看到原始的异常编号和格式化的消息。. V; H3 B! n+ _2 ^5 S  `/ @
我如何获得原始的异常编号?
; `/ {; {3 j) a2 ~; Y) ?6 Q2 ctry5 }# u. u( q4 p8 b' ^* [; v& d
{
! W1 K- V5 Y% d# Q$ r4 r" e& l    // ... code
1 \7 Q0 k2 n5 R$ J$ s}
6 M, L8 J' v7 f( c3 [catch
. a1 u! H6 C* s$ X/ ^4 N(SqlException sqlException)+ |) z7 }7 }0 d
{2 @9 x" \* ?! C; R$ h8 s; o% F
    switch (sqlException.Number)0 V* r: @; `8 z' L  e; Z
    {8 P  J* l0 {* `" ]
        // Name already exists
3 Y2 I; B: O, E+ r6 x( n9 L        case 2627:
& b" y: x* H2 u/ r- d' M            throw new ItemTypeNameAlreadyExistsException();
6 t! D0 g4 X0 a5 U5 M        // Some other error
, F/ H; S! F+ n5 T( l2 l        // As the exception number is 50000 it always ends here!!!!!!: S! ^1 R0 d4 S, n& e4 B
        default:/ \/ u# a- e" _  J' H
            throw new ItemTypeException();
/ p1 ?  \' G$ i- G    }. |. l0 H5 M4 R  {
}
( g! v6 O* [4 U现在,返回值已被使用。我想我可以使用输出参数来获取异常号,但这是一个好主意吗?) n: y/ O& J! o5 w0 ~; i
我该怎么办才能获得例外编号?谢谢8 u. @" v/ @% U% C- u+ H' K$ C5 h
PS:这是必需的,因为我有两个INSERT指令。
7 R4 G5 {3 i- K. G                % ?2 t4 u5 F& f; a) _
解决方案:
0 V* _6 m/ {0 N3 m9 y               
. R& q0 C/ ~: x0 M. w7 E" ^4 _. E; n  [  N; O5 f( i
/ O% D7 n! B# K
                谢谢你们的回答。我已经做过一些事情,可以从重新抛出异常的信息中获取错误。
, H( K2 V! w1 I. ?@gbn我也喜欢gbn的答案,但是我会坚持这个答案,因为这是最有效的答案,我在这里发布它,希望它对其他人也有用。
% X  N! G% B7 Q" {+ ^0 o答案是在应用程序中使用事务。
- f+ y" }0 E6 w% H; ], _如果在存储过程中未捕获到异常,则将在SqlException对象中获取原始编号。在应用程序中捕获原始异常之后,我编写以下代码, r& _3 Z& y9 k0 Y9 R' g: G9 |) ?& X
transaction.Rollback();
" z( e: l$ |3 @0 N7 C$ \5 ]( m- `: P否则:
+ X2 d. X! J# J1 g$ @- ?transaction.Commit();0 V7 U1 x7 l0 ~
它比我最初预期的要简单得多!
& z% ?4 h3 E2 X  L5 S+ mhttp://msdn.microsoft.com/zh-
8 b1 W, u: P) A) `* W* uCN/library/system.data.sqlclient.sqltransaction.aspx
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则