C#:SQL事务

Jer*_*ald 1 c# sql database-connection transactions

连接关闭时,是否可以在c#中检索当前的SQL事务?

sqlTransaction.Save("savePoint"); 
sqlConnection.Close()              // im purposely closing it to test 

if (sqlConnection.State == ConnectionState.Close)
{
    sqlConnection.Open():

   // is it possible to resume the sql transaction when I re-open    
   // the sql connection? how? 
}
Run Code Online (Sandbox Code Playgroud)

RBa*_*ung 5

当连接终止时,任何SQL Server都不会回滚任何未提交的事务.


Rem*_*anu 5

SqlTransaction.Save不会“保存”事务,而是创建一个事务保存点,这是完全不同的东西:

在事务中创建一个保存点,可用于回滚事务的一部分,并指定保存点名称。

可以在事务提交之前使用保存点来部分回滚事务完成的一些工作。一个典型的示例是尝试执行可能会失败的更新,因此您在执行更新之前创建一个保存点,并且在失败时回滚到该保存点,从而保留在该保存点之前完成的所有工作。

有关如何使用保存点的示例,请参阅异常处理和嵌套事务。

现在回到你的问题,有没有办法让连接启动连接、关闭连接,并在重新打开时获取相同事务?从技术上讲,通过使用(现已弃用)sp_getbindtokensp_bindsession. 但这只是一个好奇心,绝对没有有效的场景让您尝试在两个不同的会话(连接的两次重新打开)之间“重用”事务。