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();
}
}
连接中止将触发任何挂起事务的回滚。参见控制事务:
如果客户端与数据库引擎实例的网络连接中断,当网络通知中断实例时,该连接的任何未完成的事务都将回滚