【问题标题】:Executing an SQLCommand without specifying a Transaction在不指定事务的情况下执行 SQLCommand
【发布时间】:2010-11-04 06:13:20
【问题描述】:

我们的应用程序通过 SqlCommand 在 SQL Server 数据库上执行 SELECT 查询获取了一些数据列表。我们没有在 SqlCommand 上显式设置事务,而只是将 SqlConnection 传递给它并运行它。是不是在没有指定事务时,SQL Server 会启动并使用默认 IsolationLevel 为ReadCommitted 的默认事务?

【问题讨论】:

    标签: sql-server transactions sqlcommand


    【解决方案1】:

    SQL 为您的语句隐式创建一个事务,并在语句完成时提交该事务。此事务的隔离级别将是当前的隔离级别,默认为 READ COMMITTED。某些语句会覆盖当前的隔离级别并强制执行 READ COMMITTED(例如 RECEIVE)。

    如果您的 SqlCommand 执行批处理(更多语句),则访问表的每个语句都将创建自己的事务。

    默认的autocommit of transactions 是通过更改 SET IMPLICIT_TRANSACTION ON 来控制的。

    更多详情请见Controlling Transactions

    【讨论】:

    【解决方案2】:

    SQL Server 可以在没有显式事务的情况下愉快地工作。但是,是的,我相信它本质上是已提交的(当然,除非您向查询对象添加额外的提示,例如 UPDLOCK / NOLOCK)。您可以通过以下方式对此进行调查:

    DBCC USEROPTIONS
    

    其中显示(除其他外):

    isolation level read committed
    

    【讨论】:

      猜你喜欢
      • 2021-12-29
      • 2012-04-22
      • 2017-05-24
      • 2018-09-30
      • 2017-02-07
      • 1970-01-01
      • 2018-10-18
      • 1970-01-01
      • 2012-05-25
      相关资源
      最近更新 更多