2011-02-10 75 views
8

我使用C#和Sql Server 2008,并且我的CLR存储过程中有一些try/catch块,这些被捕获。这些记录在一个文件中,它们使用SqlPipe返回代码错误和消息。这些罚款。 现在我需要做同样的事情,当我有一些未处理的错误,特别是在日志文件中有一个跟踪!CLR存储过程中的全局异常处理程序

我试过使用Application.ThreadException,但是这个类在CLR存储过程(WinForms)中不可用。我必须在我的入门Sql过程方法中使用顽皮的try/catch块吗?还是有更好的办法?

谢谢。

+1

SQL Server不允许您为*未处理的*例外指定自己的处理程序。如果未处理异常,SQL Server会向用户发送错误消息。 – 2011-02-10 10:43:49

回答

1

我记得,SQL Server会将未处理的异常转储到它自己的日志文件,并将它们返回给用户。你可能想看看。

1

最简洁的方法是在被调用的CLR方法中使用try..catch块。更好的做法是将主要功能保留在CLR条目方法调用的独立方法中:

[SqlProcedure] 
public static void GetSomething(string value) 
{ 
    try { 
     DoGetSomething(value): 
    } 
    catch (Exception ex) { 
     // error handling 
    } 
} 

private static void DoGetSomething(string value) 
{ 
    // implementation goes here 
}