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

时间:2011-02-10 10:38:06

标签: c# sql sql-server sql-server-2008 clrstoredprocedure

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

我尝试使用Application.ThreadException,但CLR存储过程(WinForms)中没有此类。我是否必须在我的条目Sql Procedure方法中使用顽皮的try / catch块,还是有更好的事情要做?

感谢。

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分: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
}