2011-02-10 100 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 
}