C# SQLTransaction.Commit()是如何工作的?

C# SQLTransaction.Commit()是如何工作的?,c#,sqltransaction,C#,Sqltransaction,几天前,我研究了SqlTransaction,我知道SqlTransaction.Commit()-它应该“提交数据库事务”-MSDN 但是它是如何工作的呢 例如:我写了一段代码如下: using (SqlTransaction tran = connection.BeginTransaction()) { try { using (SqlCommand cmd = connection.CreateCommand()) {

几天前,我研究了
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完全实现编译器的请求时,实现结果将返回给我们的编译器。当我们的编译器收到实现结果时,我们的编译器将继续编译下一个命令行(“返回true”)

但若在第二个阶段,连接断开,实现结果不会传输回我们的编译器。在这种情况下,我们的交易是否成功?数据是否在SQL Server中持久化

附加问题:我对SQLTransaction.Commit()的两个周期的预测是否正确

谢谢

try
{
    using (var conn = new SqlConnection(/* connection string or whatever */))
    {
        conn.Open();

        using (var trans = conn.BeginTransaction())
        {
            try
            {
                using (var cmd = conn.CreateCommand())
                {
                    cmd.Transaction = trans;
                    /* setup command type, text */
                    /* execute command */
                }

                trans.Commit();
            }
            catch (Exception ex)
            {
                trans.Rollback();
                /* log exception and the fact that rollback succeeded */
            }
        }
    }
}
catch (Exception ex)
{
    /* log or whatever */
}
也读一下这个

请看这里:我想你对你的问题感到困惑。在学习将SQL Server与C#相结合之前,您可能需要阅读有关“什么是数据库提交”的一般内容。谢谢!我还有一个问题:我对SQLTransaction.Commit()的两个周期的预测是否正确?请帮忙!非常感谢。我还有一个问题:我对SQLTransaction.Commit()的两个周期的预测是否正确?请帮忙你对我的答案感到满意然后标记我的答案对不起我听不懂你的问题?对不起,但我真的不明白你的评论。我的名声是7,所以我没有权力标记你的答案。如果我的补充问题不困扰你,请为我解释。谢谢我知道你不能给我的答案打分,但你可以选择正确答案,得2分。