ADO的命运.当连接突然中断时的Net事务

本文关键字:Net 事务 中断 连接 命运 ADO 突然 | 更新日期: 2023-09-27 17:51:17

考虑下面的示例代码。

如果在执行步骤2(即第二个命令)时,与数据库的连接突然断开,那么即使我们尝试回滚事务,它也不会回滚,因为没有与数据库服务器的连接。

在这种情况下,数据库服务器端的事务对象发生了什么? 是否保持等待模式?当我试图在ADO中运行长事务时,我遇到了这种情况。通过VPN连接到数据库服务器。
using (SqlConnection connection =
        new SqlConnection(connectionString))
{
SqlCommand command = connection.CreateCommand();
SqlTransaction transaction = null;
try
{
    // BeginTransaction() Requires Open Connection
    connection.Open();
    transaction = connection.BeginTransaction();
    // Assign Transaction to Command
    command.Transaction = transaction;
    // Execute 1st Command
    command.CommandText = "Insert ...";
    command.ExecuteNonQuery();
    // Execute 2nd Command
    command.CommandText = "Update...";
    command.ExecuteNonQuery();
    transaction.Commit();
}
catch
{
    transaction.Rollback();
    throw;
}
finally
{
    connection.Close();
}

}

ADO的命运.当连接突然中断时的Net事务

连接中止将触发任何挂起事务的回滚。参见控制事务:

如果客户端与数据库引擎实例的网络连接中断,当网络通知中断实例时,该连接的任何未完成的事务都将回滚