当ExecuteNonQuery()运行时,Sql事务退出

本文关键字:Sql 事务 退出 运行时 ExecuteNonQuery | 更新日期: 2023-09-27 18:14:27

我正试图实现一个sql事务,但是,我遇到了一点麻烦。我有一个简单的数据库有三个表。用户、帖子和评论。我希望实现一个删除按钮,它将从Users表中删除一个用户。我最初遇到的问题是,我需要从帖子和评论表中删除用户FK,然后从user表中删除用户。我上网看了看,有人建议对多个服务器调用使用事务处理。下面是我的代码:

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块中执行ExecutyNonQuery,然后跳转到catch。因此回滚更改。没有任何错误代码显示,所以我不确定出了什么问题。

当ExecuteNonQuery()运行时,Sql事务退出

您缺少command.Transaction = sqlTran;

不要使用try {} catch {}。至少使用try {} catch (Exception ex) {} ->,这将给你足够的信息来解决你自己的问题