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

时间:2009-06-19 09:07:59

标签: sql-server transactions sqlcommand

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

2 个答案:

答案 0 :(得分:6)

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

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

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

有关详细信息,请参阅Controlling Transactions

答案 1 :(得分:3)

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

DBCC USEROPTIONS

显示(其中包括):

isolation level read committed