8

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

我尝试使用 Application.ThreadException 但此类在 CLR 存储过程 (WinForms) 中不可用。我是否必须在我的条目 Sql 过程方法中使用一个顽皮的 try/catch 块,或者有什么更好的办法吗?

谢谢。

4

2 回答 2

1

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

于 2011-02-10T10:48:57.497 回答
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
}
于 2011-06-24T19:02:23.700 回答