前几天,我研究SqlTransaction
了一下,我知道了它的目的SqlTransaction.Commit()
——它应该“提交数据库事务”。- MSDN。
但它是如何工作的?
例如:我写了一段这样的代码:
using (SqlTransaction tran = connection.BeginTransaction())
{
try
{
using (SqlCommand cmd = connection.CreateCommand())
{
cmd.CommandText = msg.command;
cmd.Transaction = tran;
cmd.ExecuteNonQuery();
}
}
catch (Exception)
{
// if all of above have any exception, that's mean my transaction is
// failure and my database has no change.
return false;
}
tran.Commit();
// if all of above have no problems, that's mean my transaction is successful
return true;
connection.Dispose();
}
在这种情况下,SQL Server 位于另一台计算机上。
我猜:commit 方法有两个周期,周期 1:当我执行时tran.Commit()
,编译器会向 SQL Server 发出信号并与 SQL Server 对话:“我没事,请帮我提交(更改)数据”,然后 SQL Server 将执行编译器的请求。阶段2:当SQL Server完全执行编译器的请求时,执行结果将返回给我们的编译器。当我们的编译器收到执行结果时,我们的编译器将继续编译下一个命令行(“return true”)。
但是如果在第二阶段,连接断开并且执行结果不会传回我们的编译器。在这种情况下,我们的交易成功与否?数据是否保留在 SQL Server 中?
附加问题:我对两期 SQLTransaction.Commit() 的预测是否正确?
谢谢!