我试图实现一个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。从而回滚变化。没有显示任何错误代码,因此我不确定出现了什么问题。
非常感谢任何有关此事的帮助。
答案 0 :(得分:5)
你错过了command.Transaction = sqlTran;
。
请勿使用try {} catch {}
。至少使用try {} catch (Exception ex) {}
- >这将为您提供足够的信息来自行解决问题。