2011-05-11 6 views
3

私は複数のエラー

BACKUP LOG [somedb] 
TO DISK = N'i:\log.bak'; 

のようなものは、それが2つのエラーメッセージをスローし実行します。私は、エラーが返さTRYのCATCHでエラーを処理しようとすると

Msg 3201, Level 16, State 1, Line 2 
Cannot open backup device 'i:\log.bak'. Operating system error 3(The system cannot find the path specified.). 
Msg 3013, Level 16, State 1, Line 2 
BACKUP LOG is terminating abnormally. 

は常に3013ですスペースの不足やドライブがないなどの理由でバックアップが失敗したかどうかを知りたいので、これは問題です。

@@ ERRORを使用すると、同じエラー番号が返されます。

これらのような複数のエラーメッセージを処理する方法はありますか?あなたはSqlExceptionErrorsコレクションを検査する必要が

答えて

4

catch(SqlException sqlEx) 
{ 
    foreach(SqlError error in sqlEx.Errors) 
    { 
     int code = error.Number; 
     string msg = error.Message; 
    } 
} 

あなたはSqlException.Errors

+0

に関連するすべての詳細をすべてのエラーを取得する必要はT-SQLで同じことを行うことができますか? – Nodja

+0

@MikeDaSpike:いいえ、私の知るところではありません。「TRY..CATCH」メカニズムを使っていても---( –

+2

@Mike - 簡単にはありません。DBCC OUTPUTBUFFER(@@ spid)。 '[出力を解析する方法を理解する]必要があります(http://stackoverflow.com/questions/3697492/capturing-multiple-error-messages-from-a-single-statement/5773071#5773071) –