1

私がやっているasp.netプロジェクトに少し行き詰まっています! コードビハインドから呼び出されるクラスを取得しましたが、その関数の多くには戻り値の型がありません。つまり、void です。では、どのように例外処理を行うのですか??? また、クラス内の関数がデータセットなどの戻り値の型を持っている場合、どのようにして例外を返したり、例外が発生したことを示したりするのでしょうか? コードビハインドから参照されるクラスから次のコードを添付しました。

public void fnRecord(string []varList, string fnName)
    {
        try
        {
            String x;

            StringBuilder SQLParameters = new StringBuilder();

            SQLParameters.AppendLine("SELECT #{Function}(");
            {
                SQLParameters.Replace("#{Function}", fnName);
            }

            for (int i = 0; i < varList.Length; i++)
            {                   
                x = varList[i].ToString();
                SQLParameters.Append("'" + x + "',");
            }

            SQLParameters.Remove((SQLParameters.Length - 1), 1);
            SQLParameters.Append(")");

            string SQLCMD = SQLParameters.ToString();

            conn.Open();
            NpgsqlCommand command = new NpgsqlCommand(SQLCMD, conn);
            Object result = command.ExecuteScalar();
        }

        catch (NpgsqlException ne)
        {
            //return ne;
        }

        catch (Exception x)
        {
            //error code
        }

        finally
        {
            conn.Close();
        }
    }

どんな助けでも大歓迎です!

ありがとう

4

3 に答える 3

1

適切に処理する予定の例外のみをキャッチします。エラーを UI に反映させたい場合は、UI でキャッチします。それらを処理し、ビジネス ロジックで問題に対処しようとする場合は、その時点でそれらをキャッチして処理します。

ところで、あなたのコードはSQL インジェクション攻撃を受けやすいです。パラメータ化されたクエリについて何かを学ぶのが一番です。

于 2008-11-18T10:43:29.680 に答える
0

答えてくれてありがとう... obout ライブラリを使用しているので、例外処理関数も試してみる必要があります。

于 2008-11-18T11:45:13.207 に答える
0

例外を返しません。あなたはそれらを投げます。これが例外のポイントです。例外処理によってメソッド シグネチャが乱雑になることは望ましくありません。

catch 句では、例外を処理するために実際には何もしません。次に、それらをまったくキャッチしないでください。コードビハインドにバブルアップさせ、そこでキャッチします-メソッド呼び出しの周りにtry-catchを配置します。

または、メソッドで SQL 例外をキャッチし、適切なメッセージを含む新しい例外をスローし、次のように SqlExceptions を内部例外として追加します。

catch (NpgsqlException ne)
{
    throw new Exception("Your explanatory message here", ne);
}
finally
{
    ...
}
于 2008-11-18T10:46:02.577 に答える