0

SQL トランザクションを実装しようとしていますが、ちょっと面倒です。3 つのテーブルを持つ単純なデータベースがあります。ユーザー、投稿、コメント。ユーザー テーブルからユーザーを削除する削除ボタンを実装したいと考えています。私が抱えていた最初の問題は、ユーザーの FK を投稿テーブルとコメント テーブルの両方から削除してから、ユーザー テーブルからユーザーを削除する必要があることでした。オンラインで調べたところ、誰かが複数のサーバー呼び出しにトランザクションを使用することを提案していました。これが私のコードです:

public void DeleteUser(int UserId)
    {
        using (SqlConnection con = new SqlConnection(connectionString))
        {
            con.Open();

            SqlTransaction sqlTran = con.BeginTransaction();

            try
            {
                using (SqlCommand command = new SqlCommand("DELETE FROM Comment WHERE UserId = " + @UserId, con))
                {
                    SqlParameter userid = new SqlParameter("@UserId", SqlDbType.Int);
                    userid.Value = UserId;
                    command.ExecuteNonQuery();
                }

                using (SqlCommand command = new SqlCommand("DELETE FROM Post WHERE UserId = " + @UserId, con))
                {
                    SqlParameter userid = new SqlParameter("@UserId", SqlDbType.Int);
                    userid.Value = UserId;
                    command.ExecuteNonQuery();
                }

                using (SqlCommand command = new SqlCommand("DELETE FROM Users WHERE UserId = " + @UserId, con))
                {
                    SqlParameter userid = new SqlParameter("@UserId", SqlDbType.Int);
                    userid.Value = UserId;
                    command.ExecuteNonQuery();
                }

                sqlTran.Commit();
            }
            catch
            {
                sqlTran.Rollback();
            }
        }
    }

私が抱えている問題は、DeleteUser メソッドが実行されると、プログラムが最初の using ブロックの command.ExecutyNonQuery まで到達してから、キャッチにジャンプすることです。したがって、変更をロールバックします。エラーコードが表示されないので、何が問題なのかわかりません。

この問題で何か助けていただければ幸いです。

4

1 に答える 1

5

あなたが行方不明command.Transaction = sqlTran;です。

使用しないtry {} catch {}でください。少なくとも使用try {} catch (Exception ex) {}-> これにより、問題を自分で解決するのに十分な情報が得られます。

于 2013-05-21T08:32:57.743 に答える