Sql事务c# - 在运行ExecuteNonQuery()时退出尝试

时间:2013-05-21 08:31:09

标签: c# sql

我试图实现一个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方法时,程序会在第一个使用块中获取command.ExecutyNonQuery,然后跳转到catch。从而回滚变化。没有显示任何错误代码,因此我不确定出现了什么问题。

非常感谢任何有关此事的帮助。

1 个答案:

答案 0 :(得分:5)

你错过了command.Transaction = sqlTran;

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