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 に答える