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 まで到達してから、キャッチにジャンプすることです。したがって、変更をロールバックします。エラーコードが表示されないので、何が問題なのかわかりません。
この問題で何か助けていただければ幸いです。