4

コメントを削除する必要がある2つのデータベース関数を使用する必要があり、その後、ユーザーのスコアを下げる2番目の関数が呼び出されます。

問題: 2 番目の関数で例外が発生した場合、スコアは差し引かれませんが、コメントは削除されます。

私はクラスオブジェクトの最初の関数のストアアクションを試みています.2番目に例外が発生した場合、データベースに書き換えるために逆のアクションが行われます。これを行うための他のアプローチはありますか?私に提案してください。前もって感謝します

4

2 に答える 2

2

両方のデータベース呼び出しが同じトランザクションのスコープ内にある必要があります。したがって、例外が発生すると、すべてがロールバックされます。

データベースへのアクセス方法によって異なりますが、次のようになります。

using (var Conn = new SqlConnection(_ConnectionString))
{
    SqlTransaction trans = null;
    try
    {
        Conn.Open();
        trans = Conn.BeginTransaction();

        using (SqlCommand Com = new SqlCommand(ComText, Conn, trans))
        {
                    // delete comment
                    // update score
         }
         trans.Commit();
      }
    catch (Exception Ex)
    {
        if (trans != null) trans.Rollback();
        return -1;
    }

}
于 2012-12-13T08:50:28.327 に答える
1

両方の関数を書き込む必要がある場合、またはそれらのいずれかの近くに配置する必要がある場合は、両方の関数の周りにトランザクションを配置する必要があります。

トランザクションをコミットすると、コメントと減少スコアがデータベースに保存されます。例外が発生した場合は、ロールバックを実行でき、データベースで何も起こりません。

于 2012-12-13T08:51:50.277 に答える