Ari*_*ian 17 transactions sql-server-2005 transactionscope sql-server-2008 c#-4.0
Sql Server 2008中的隐式和显式事务有什么区别?
在TransactionScope背景中会发生什么?我正在使用TransactionScope但在Sql server profiler中我没有看到"Begin transaction ..."语句.
它是如何工作的?
Ric*_*iwi 12
基本上,在c#中将TransactionScope设置为Implicit时,它会调用SQL Server SET命令将连接置于IMPLICIT_TRANSACTIONS模式.您执行的任何操作(使用第二个链接中列出的命令之一)都会启动一个在发出提交之前保持打开的事务.如果在连接结束时未发出提交,则执行隐式ROLLBACK.
这与OFF设置不同,OFF设置也将每个语句放入事务中 - 区别在于OFF模式(因此事务是显式的),每个事务(单数语句)都会立即提交.
在显式事务模式下,您需要显式启动事务.在隐式事务模式中,每次提交后都会自动启动事务.所以你只需要提交.
由于事务是"隐式"启动的,因此您不会在日志中看到明确的"BEGIN".:)
默认情况下,数据库以显式事务模式运行,并启用自动提交事务.实际上,除非使用BEGIN TRANSACTION启动显式事务,否则每个数据修改都在一个单独的事务中启动,该事务在语句之后提交.这允许数据库在失败时回滚整个语句(例如批量插入或修改触发器中其他数据的插入).