C# CLR存储过程中的全局异常处理程序

C# CLR存储过程中的全局异常处理程序,c#,sql,sql-server,sql-server-2008,clrstoredprocedure,C#,Sql,Sql Server,Sql Server 2008,Clrstoredprocedure,我使用C#和Sql Server 2008,在CLR存储过程中有一些try/catch块,这些块被捕获。它们被记录在一个文件中,并使用SqlPipe返回代码错误和消息。这些工作需要罚款。 现在,当我有一些未跟踪的错误时,我也需要这样做,特别是在日志文件中有一个跟踪 我尝试使用Application.ThreadException,但该类在CLR存储过程(WinForms)中不可用。我是否必须在我的entry Sql过程方法中使用一个顽皮的try/catch块,还是有更好的方法可以做 谢谢。我记得

我使用C#和Sql Server 2008,在CLR存储过程中有一些try/catch块,这些块被捕获。它们被记录在一个文件中,并使用SqlPipe返回代码错误和消息。这些工作需要罚款。 现在,当我有一些未跟踪的错误时,我也需要这样做,特别是在日志文件中有一个跟踪

我尝试使用Application.ThreadException,但该类在CLR存储过程(WinForms)中不可用。我是否必须在我的entry Sql过程方法中使用一个顽皮的try/catch块,还是有更好的方法可以做


谢谢。

我记得,SQL Server除了将未处理的异常返回给用户之外,还会将其转储到自己的日志文件中。您可能需要对此进行研究。

最干净的方法是在被调用的CLR方法中使用try..catch块。更好的做法是将主要功能保留在由CLR entry方法调用的单独方法中:

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

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

SQL Server不允许您为未处理的异常指定自己的处理程序。如果未处理异常,SQL Server将向用户发送错误消息。