当前位置: 首页 > 面试题库 >

是否需要显式事务回滚?

严宇
2023-03-14
问题内容

那里的许多示例都主张对数据库事务进行显式回滚,具体方法如下:

using (var transaction = ...)
{
    try
    {
        // do some reading and/or writing here

        transaction.Commit();
    }
    catch (SqlException ex)
    {
        // explicit rollback
        transaction.Rollback();
    }
}

但是,我倾向于这样做:

using (var transaction = ...)
{
    // do some reading and/or writing here

    transaction.Commit();
}

当发生异常时,我只是依靠未提交事务的隐式回滚。

依靠这种隐式行为有什么问题吗?有人有令人信服的理由为什么我不应该这样做吗?


问题答案:

不,它不是特别需要的,但是我可以想到两个可能是个好主意的原因:

  • 明晰

有人可能会争辩说使用transaction.Rollback()可以更清楚地表明在什么情况下不会进行交易。

  • 释放锁

在处理事务时,重要的是要意识到某些锁定仅在事务回滚或提交时才被释放。如果您正在使用该using语句,则在处理该事务时将回滚该事务,但是如果由于某种原因您需要在using块内进行一些错误处理,则在回滚之前删除该事务(删除锁)可能会比较有利。执行复杂/耗时的错误处理。



 类似资料:
  • 问题内容: 我有两个线程,我想确保我在LinkedBlockingQueue上正确进行了同步。这正确吗?还是不需要在(messageToCommsQueue)上进行显式同步? 宣言: 方法一: 方法二: 问题答案: 是的,没有必要。JavaDoc说: BlockingQueue实现是线程安全的。

  • 我对Web的使用有点困惑.xml在Spring编写REST服务时使用泽西岛框架。在我看来,如果我使用注释来定义路径,为什么我们需要web.xml?我最近刚刚使用在线参考文档开发了Spring Boot应用程序,他们甚至没有提到web.xml。那么,说Spring已经删除了web.xml并用注释代替它是对的吗?(例如@Path、@Get、@Post)。我在同一行的第二个问题是,如果我没有web.xm

  • 对于每个客户机,我们自然需要发送关于事务的反馈(OK或Exception->rollback)。 我的问题是:如果我使用,是否意味着只使用一个事务,如果第100个客户机遇到问题,第1个客户机的事务也会回滚?

  • 问题内容: 我了解jsonp是一种绕过相同原始政策的技术。基本上,您在脚本标签中引用json服务服务器端点,因为脚本标签不受SO策略的限制。 我的问题是:假设服务器具有一个为json提供服务的终结点,是否需要对服务器进行任何修改才能在客户端中使用jsonp? 我想不,但是想确定。 问题答案: 是的,JSONP呈现时略有不同,因此您的服务器需要支持它。 JSON看起来像这样: JSONP看起来像这样

  • 问题内容: 最近,我碰上了这篇文章如何写在Node.js的一个单 我知道以下 状态的文档: 第一次加载模块后将对其进行缓存。多次调用可能不会导致模块代码多次执行。 因此,似乎每个需要的模块都可以轻松地用作单例,而无需单例样板代码。 题: 上面的文章是否提供了有关创建单例的解决方案? 问题答案: 这基本上与nodejs缓存有关。干净利落。 https://nodejs.org/api/modules

  • 随着新的工具栏小部件的引入和AppCompat(android.support.v7.widget.Toolbar)版本的推出,是否还需要调用setSupportActionbar(工具栏)?或者调用setSupportActionbar有什么好处吗;现在我们可以设置标题、子标题、导航图标、导航图标单击侦听器(getSupportActionBar()。直接在工具栏上设置DisplayHomeAs