在不指定事务的情况下执行SQLCommand

Gra*_*ham 5 sql-server transactions sqlcommand

我们在应用程序中通过SqlCommand SELECT在SQL Server数据库上执行查询来获取一些数据列表.我们没有在SqlCommand上显式设置事务,而只是将它传递给SqlConnection并运行它.是否是这样的情况,当没有指定SQL Server将启动并使用默认的IsolationLevel的默认事务ReadCommitted

Rem*_*anu 7

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

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

通过更改SET IMPLICIT_TRANSACTION ON来控制事务的默认自动提交.

有关详细信息,请参阅控制事务.


Mar*_*ell 3

SQL Server 无需显式事务即可正常工作。但是,是的,我相信它本质上是读提交的(当然,除非您向查询对象添加额外的提示,例如UPDLOCK/ NOLOCK)。您可以通过以下方式对此进行调查:

DBCC USEROPTIONS
Run Code Online (Sandbox Code Playgroud)

其中显示(除其他外):

isolation level read committed
Run Code Online (Sandbox Code Playgroud)