0

新しいメンバーをデータベースに挿入しようとしていますが、重複がある場合、catchブロックは正常に機能します。ただし、新しいメンバーが存在する場合、trycatchブロックの両方がメッセージを返します。これが私のコードです。

if (Request["cmd"] == "ins")
{
    try{
        mydb db = new mydb();
        member newm = new member()
        {
            Id = Request["uid"],
            Name = Request["uname"]
        };

        db.AddTomembers(newm);
        db.SaveChanges();
        Response.Write("ok");
        Response.End();
    }
    catch(Exception s) {
        Response.Write(s);
        Response.End();
    }
}
4

3 に答える 3

6

質問からは明確ではありませんが、文書化されているように例外 ( )をスローすることが問題であると強く疑っています。Response.End()ThreadAbortException

ASP の End メソッドの動作を模倣するために、このメソッドは [ThreadAbortException] 例外の発生を試みます。この試行が成功すると、呼び出し元のスレッドが中止され、サイトのパフォーマンスに悪影響を及ぼします。その場合、End メソッドの呼び出し後のコードは実行されません。

その例外をキャプチャしてから、再度呼び出しています。Response.Endをブロックに移動するだけfinallyです-または理想的には、それを完全に取り除き、制御フローを構造化して、それを必要としないようにします...再び、文書化されているように:

このメソッドは、ASP との互換性、つまり、ASP.NET より前の COM ベースの Web プログラミング テクノロジとの互換性のためにのみ提供されています。EndRequest イベントにジャンプしてクライアントに応答を送信する場合は、通常、代わりに CompleteRequest を呼び出すことをお勧めします。

(単に ではなく特定の例外をキャッチした場合Exception、この問題も発生しないことに注意してください。)

于 2013-05-03T14:38:00.200 に答える
1

両方okと例外メッセージsが書き込まれている場合、例外をスローしているのは Response.End() です。s を調べて、何が起こっているかを調べます。

推測: Response.End() は有害と見なされますか?

于 2013-05-03T14:37:54.953 に答える