2011-05-11 51 views
3

當我運行像如何處理多個錯誤

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

它拋出2個錯誤消息:

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. 

當我嘗試用TRY CATCH的錯誤返回處理錯誤總是3013這是一個問題,因爲我想知道,如果備份失敗,由於缺乏空間,或者如果驅動器不存在,等等

使用@@ ERROR返回相同的錯誤號。

有什麼辦法來處理這樣的多個錯誤消息?

回答

4

您需要檢查Errors收集SqlException內:

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) –