0

我正在尝试实现一个 sql 事务,但是,我遇到了一些麻烦。我有一个包含三个表的简单数据库。用户、帖子和评论。我希望实现一个删除按钮,该按钮将从用户表中删除一个用户。我遇到的最初问题是我需要从帖子和评论表中删除用户 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,然后跳转到 catch。从而回滚更改。没有显示任何错误代码,所以我不确定出了什么问题。

在这件事上的任何帮助将不胜感激。

4

1 回答 1

5

你不见了command.Transaction = sqlTran;

不要使用try {} catch {}。至少使用try {} catch (Exception ex) {}-> 这将为您提供足够的信息来自行解决问题。

于 2013-05-21T08:32:57.743 回答