【发布时间】:2014-03-22 16:58:45
【问题描述】:
考虑下面的示例代码。
如果在第 2 步时与数据库的连接突然中断(即第二个命令),那么即使我们尝试回滚事务,它也不会回滚,因为没有与数据库的连接服务器。
在这种情况下,数据库服务器端的事务对象会发生什么? 会一直处于等待模式吗?我当我尝试通过 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();
}
}
【问题讨论】:
标签: c# transactions ado.net sql-server-2008-r2