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