首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >ADO.NET:您需要回滚事务吗?

ADO.NET:您需要回滚事务吗?
EN

Stack Overflow用户
提问于 2011-03-08 16:58:40
回答 2查看 5.5K关注 0票数 5

考虑下面的代码,如果捕获到异常,它不会回滚事务。

代码语言:javascript
代码运行次数:0
运行
复制
transaction = connection.BeginTransaction();
command.Transaction = transaction;
try {
    // interact with database here
catch {}
finally {
    connection.Close();
}

这样做的后果是什么?是否有必要回滚事务?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-03-08 17:00:42

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

摘自here

在使用事务时,请考虑以下一般指导原则,以避免导致死锁:

  • 始终以相同的顺序跨应用程序中的事务访问表。如果每次访问表时都以不同的顺序访问表,则死锁的可能性会增加。

  • 使事务尽可能简短。不要从事务中进行阻塞或长时间运行的调用。保持事务的持续时间较短。一种方法是在靠近数据源的位置运行事务。例如,从存储过程运行事务,而不是从其他计算机运行事务。

  • 选择平衡并发性和数据完整性的隔离级别。最高隔离级别可序列化可减少并发性,并提供最高级别的数据完整性。最低隔离级别read uncommitted会产生相反的结果。
票数 2
EN

Stack Overflow用户

发布于 2011-03-08 17:01:30

最好的方法是在using块中生成事务,如下所示:

代码语言:javascript
代码运行次数:0
运行
复制
using( /*code to create the transaction you want )
{
  //perform your transaction here
  transaction.Commit();
}

如果在调用commit之前代码失败,那么当using块退出时,代码将自动回滚。

票数 16
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5230295

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档