Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2005 隐式和显式事务的区别_Sql Server 2005_Sql Server 2008_C# 4.0_Transactions_Transactionscope - Fatal编程技术网

Sql server 2005 隐式和显式事务的区别

Sql server 2005 隐式和显式事务的区别,sql-server-2005,sql-server-2008,c#-4.0,transactions,transactionscope,Sql Server 2005,Sql Server 2008,C# 4.0,Transactions,Transactionscope,SQLServer2008中隐式事务和显式事务的区别是什么 TransactionScope后台会发生什么?我正在使用TransactionScope,但在Sql server profiler中,我没有看到“开始事务…”语句 它是如何工作的?在显式事务模式下,您需要显式启动事务。在隐式事务模式中,事务在每次提交后自动启动。所以你只需要承诺 由于事务是“隐式”启动的,因此在日志中不会看到显式的“开始”。) 默认情况下,数据库以显式事务模式运行,并启用自动提交事务。这实际上意味着,除非使用BEGI

SQLServer2008中隐式事务和显式事务的区别是什么

TransactionScope后台会发生什么?我正在使用TransactionScope,但在Sql server profiler中,我没有看到“开始事务…”语句


它是如何工作的?

在显式事务模式下,您需要显式启动事务。在隐式事务模式中,事务在每次提交后自动启动。所以你只需要承诺

由于事务是“隐式”启动的,因此在日志中不会看到显式的“开始”。)

默认情况下,数据库以显式事务模式运行,并启用自动提交事务。这实际上意味着,除非使用BEGIN transaction启动显式事务,否则每次数据修改都是在语句之后提交的单独事务中启动的。这允许数据库在失败时回滚整个语句(例如大容量插入或修改触发器中其他数据的插入)。

  • 隐性交易:
  • 设置隐式_事务{ON | OFF}
基本上,在c#中,当您将TransactionScope设置为Implicit时,它会调用SQL Server set命令以将连接置于Implicit#事务模式。您所做的任何操作(使用第二个链接中列出的命令之一)都会启动一个事务,该事务将一直保持打开状态,直到发出提交。如果在连接结束时未发出提交,则执行隐式回滚


这与OFF设置不同,OFF设置也会将每条语句放入一个事务中-区别在于在OFF模式下(因此事务是显式的),每条事务(单条语句)都会立即提交。

隐式事务是自动提交的。交易没有开始或结束

显式事务使用命令具有事务的开始、结束和回滚 开始事务、提交事务和回滚事务


在显式事务中,如果其间发生错误,我们可以回滚到在隐式事务中无法完成的事务的开头。

SqlTransaction
-它是
TransactionScope
在后台使用的-仅为SQL Server 2000和更早版本发送T-SQL
BEGIN transaction
命令

对于SQL Server 2005及更高版本,TDS协议进行了扩展,允许客户端直接操作事务,而无需发送
开始事务
等。要在探查器中查看这些事件,请选择“TM:BEGIN Tran start”事件,等等。您可能需要选中“显示所有事件”复选框以查看这些事件-它们位于事务类别下


请参阅TDS协议文档中的探查器文档,谢谢。我知道当我们执行一个插入语句时,它在隐式事务中执行。你说隐式事务将在每个委托之后开始。考虑到在TransactionScope中有2个SATS,第二个状态会抛出异常。当第一个状态1完成它提交的和新的。事务将创建。您这样说吗?但为什么当第二个事务抛出异常时,整个事务将在TransactionScope中回滚?@Kerezo否,一旦事务提交,自上次提交以来,所有语句都将锁定到数据库中。因此,如果任何语句抛出异常,唯一的损失将是在最后一次提交后执行的语句数。提交和自动提交是不同的。当您将IMPLICIT_事务设置为ON时,您发送的下一个DML命令将启动一个新事务。这些更改将挂起,直到您提交或回滚。如果您在不发送提交的情况下断开连接,它将自动回滚。如果在隐式_事务关闭且没有挂起的显式事务的情况下发送DML命令,则会发生自动提交-在执行DML命令结束时,在处理下一个命令之前,会自动提交数据。我从未使用过隐式事务。如果您(显式地)使用
开始事务…
,则可以正确地说,在
隐式事务关闭
模式下,事务是显式的,否则这称为自动提交模式。