2012-12-13 70 views
4

我需要使用两个数据库函数,其中我需要删除注释,然后调用第二个函数,这会降低用户的分数。如何处理两个函数之间的数据调用一个接一个

问题: 如果在第二个函数中发生异常,分数不会被扣除,但评论被删除。

我尝试在类对象中存储第一个函数的存储操作,并且如果在第二个函数中发生异常,将会发生反向操作以将其重写到数据库中。有没有其他办法可以做到这一点,请给我建议。 在此先感谢

+0

结合到一个功能,以避免额外的处理? – Raptor

+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; 
    } 

} 
+0

更详细地解释一下,我该如何解决这个问题.... –

+1

更新了答案,保持它更清晰的例子,但有几个好的方法,详细的很容易遵循,但有改进的余地,取决于您的要求,但应指向正确的方向 – dove

+0

感谢您的上述代码,它帮助了我。 –

1

当两个功能应该writen或neighter其中之一,你需要把一个交易周围两种功能。

如果您提交交易,评论和降低分数将被保存在数据库中,如果您有异常,您可以执行回滚,并且数据库中不会发生任何事情。

相关问题