我如何重置 Transactionscope 并在之后提交?
how do i Reset Transactionscope and commit after?
我怎样才能做到这一点?这是可能的还是我应该声明另一个事务范围?
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
}
}
我怎样才能做到这一点?这是可能的还是我应该声明另一个事务范围?
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
}
}