我需要使用两个数据库函数,其中我需要删除注释,然后调用第二个函数,这会降低用户的分数。
问题: 如果在第二个功能中发生异常,则不会扣除分数,但删除了评论。
我在类对象中尝试第一个函数的存储操作,如果在第二个函数中发生异常,则会发生反向操作以在数据库中重写它。有没有其他方法可以做到这一点请建议我。 提前谢谢
答案 0 :(得分:2)
您需要在同一事务的范围内进行两个数据库调用。因此,如果您收到异常,则所有异常都将被回滚。
这取决于您访问数据库的方式,但可能是这样的:
using (var Conn = new SqlConnection(_ConnectionString))
{
SqlTransaction trans = null;
try
{
Conn.Open();
trans = Conn.BeginTransaction();
using (SqlCommand Com = new SqlCommand(ComText, Conn, trans))
{
// delete comment
// update score
}
trans.Commit();
}
catch (Exception Ex)
{
if (trans != null) trans.Rollback();
return -1;
}
}
答案 1 :(得分:1)
如果两个函数都应该写入或更新,则需要在两个函数周围进行事务处理。
如果您提交了该事务,则评论和评分将保存在数据库中,如果您有例外,则可以进行回滚,数据库中没有任何操作。