ADO.NET:你需要回滚一个事务吗?

时间:2011-03-08 08:58:40

标签: c# transactions

考虑以下代码,如果发现异常,则不会回滚事务。

transaction = connection.BeginTransaction();
command.Transaction = transaction;
try {
    // interact with database here
catch {}
finally {
    connection.Close();
}

这有什么后果,是否有必要回滚交易?

2 个答案:

答案 0 :(得分:14)

最好是在像这样的使用块中生成你的事务:

using( /*code to create the transaction you want )
{
  //perform your transaction here
  transaction.Commit();
}

如果您在调用commit之前编码失败,则会在退出using块时自动回滚。

答案 1 :(得分:2)

它将在数据库上留下一个打开的事务,这可能会阻止其他查询。

取自here

  

考虑以下一般情况   使用交易时的准则   这样你就可以避免造成   死锁:

     
      
  • 始终以相同的顺序访问表   跨越您的交易   应用。一个人的可能性   访问时死锁会增加   每次都以不同的顺序排列表   你访问它们。

  •   
  • 将交易保持为   尽可能短。不要做   来自的阻止或长时间呼叫   交易。保持持续时间   交易简短。一种方法是   运行接近数据的事务   资源。例如,运行一个事务   从存储过程而不是   从a运行事务   不同的电脑。

  •   
  • 选择一个等级   隔离,平衡并发   和数据完整性。最高的   隔离级别,可序列化,减少   并发性和提供最高   数据完整性水平。最低的   隔离级别,读取未提交,   结果相反。

  •