我需要使用两个数据库函数,其中我需要删除注释,然后调用第二个函数,这会降低用户的分数。如何处理两个函数之间的数据调用一个接一个
问题: 如果在第二个函数中发生异常,分数不会被扣除,但评论被删除。
我尝试在类对象中存储第一个函数的存储操作,并且如果在第二个函数中发生异常,将会发生反向操作以将其重写到数据库中。有没有其他办法可以做到这一点,请给我建议。 在此先感谢
我需要使用两个数据库函数,其中我需要删除注释,然后调用第二个函数,这会降低用户的分数。如何处理两个函数之间的数据调用一个接一个
问题: 如果在第二个函数中发生异常,分数不会被扣除,但评论被删除。
我尝试在类对象中存储第一个函数的存储操作,并且如果在第二个函数中发生异常,将会发生反向操作以将其重写到数据库中。有没有其他办法可以做到这一点,请给我建议。 在此先感谢
您需要在同一个事务的范围内都有数据库调用。因此,如果您遇到异常,所有将会回滚。
这取决于你如何访问数据库,但它可能是这样的:
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;
}
}
更详细地解释一下,我该如何解决这个问题.... –
更新了答案,保持它更清晰的例子,但有几个好的方法,详细的很容易遵循,但有改进的余地,取决于您的要求,但应指向正确的方向 – dove
感谢您的上述代码,它帮助了我。 –
当两个功能应该writen或neighter其中之一,你需要把一个交易周围两种功能。
如果您提交交易,评论和降低分数将被保存在数据库中,如果您有异常,您可以执行回滚,并且数据库中不会发生任何事情。
结合到一个功能,以避免额外的处理? – Raptor
在一个函数中,如果执行完第一个查询之后发生异常,比.... –