我正在尝试实现一个 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。从而回滚更改。没有显示任何错误代码,所以我不确定出了什么问题。
在这件事上的任何帮助将不胜感激。