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

时间:2014-03-22 16:58:45

标签: c# transactions ado.net sql-server-2008-r2

考虑下面的示例代码。

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

在这种情况下,数据库服务器端的事务对象会发生什么? 是否会保持等待模式? I当我尝试通过VPN连接连接到数据库服务器在ADO.Net中运行长事务时出现这种情况。

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();
}

}

1 个答案:

答案 0 :(得分:2)

连接中止将触发任何挂起事务的回滚。见Controlling Transactions

  

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