我如何重置transactionscope并在此之后提交



我该如何实现?这是可能的还是我应该声明另一个交易范围?

    using (TransactionScope scope = new TransactionScope())
        {
            using (SqlConnection connection1 = new SqlConnection(connectString1))
            {
                connection1.Open();
                SqlCommand command1 = new SqlCommand(NomProcedure, connection1);
                command1.CommandType = CommandType.StoredProcedure;
                command1.ExecuteNonQuery();
                //Rollback transaction Here 
                SqlCommand command2 = new SqlCommand("dbo.AddHistory", connection1);
                command2.CommandType = CommandType.StoredProcedure;
                command2.ExecuteNonQuery();
            }
            scope.Complete();
        }

我只想提交第二个命令

从开始交易的那一刻起,直到完成交易才能确认任何更改。

如果要回滚,那么简单地不致电Complete()

using (TransactionScope scope = new TransactionScope())
{
    ...
    // do not call this to rollback what you did before
    scope.Complete();
}

这可以通过在try/catch内进行交易(如MSDN建议(或条件调用Complete(if(。

来完成。

如果您想在仍在内部回滚交易时执行命令,则应该这样:

using (SqlConnection connection1 = new SqlConnection(connectString1))
{
    connection1.Open();
    using (TransactionScope scope = new TransactionScope())
    {
        ... // some commands
        // if you need to rollback and execute other command
        if(blabla)
        {
            scope.Dispose(); // without this further command is also rolled back
            ... // command
        }
        else
            scope.Complete(); // everything is fine, confirm transaction
    }
}

相关内容

最新更新