2011-05-11 47 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) –