.net SqlTransaction和嵌套事务

.net SqlTransaction和嵌套事务,.net,sql,ado.net,sqltransaction,.net,Sql,Ado.net,Sqltransaction,是否可以使用SqlTransaction类创建嵌套事务?如果是,我需要注意哪些规则/限制?是的,可以创建嵌套事务 例如: transaction A do action #1 transaction B do action #2 transaction C do action #3 rollback transaction B transaction D do action #4 commit transaction D transaction E do action #5 commit t

是否可以使用SqlTransaction类创建嵌套事务?如果是,我需要注意哪些规则/限制?

是的,可以创建嵌套事务

例如:

transaction A do action #1 transaction B do action #2 transaction C do action #3 rollback transaction B transaction D do action #4 commit transaction D transaction E do action #5 commit transaction A
在这个序列中,只有操作1、4和5实际发生。嵌套事务除了我所知道的事务本身的限制之外没有其他限制。必须理解的唯一一点是,在提交嵌套事务的顶层之前,实际上不会提交任何内容。

是的,可以创建嵌套事务

例如:

transaction A do action #1 transaction B do action #2 transaction C do action #3 rollback transaction B transaction D do action #4 commit transaction D transaction E do action #5 commit transaction A
在这个序列中,只有操作1、4和5实际发生。嵌套事务除了我所知道的事务本身的限制之外没有其他限制。唯一需要了解的是,在提交嵌套事务的顶层之前,实际上不会提交任何内容。

不幸的是,SQL Server忽略了内部事务的提交

您可以嵌套事务,但请注意,该行为可能不是您所期望的

在最外层事务提交之前,不会提交任何内容

所以,在下面

transaction A
Query A

transaction B
Query B

Commit B
Rollback A

查询B的结果实际上没有提交到数据库。

不幸的是,SQL Server忽略了内部事务的提交

您可以嵌套事务,但请注意,该行为可能不是您所期望的

在最外层事务提交之前,不会提交任何内容

所以,在下面

transaction A
Query A

transaction B
Query B

Commit B
Rollback A
查询B的结果实际上没有提交到数据库。

您可以在SqlTransaction类上使用Savestring savePointName方法。这将创建一个保存点,您可以在事务中回滚到该保存点。因此,如果部分代码失败,您将回滚到上一个保存点并重新开始

例如:

SqlTransaction tran = _transaction as SqlTransaction;
tran.Save(savePointName);
当你失败时,你会:

tran.Rollback(savePointName);
你可以想做多少次就做多少次。这将解决嵌套事务的问题。

您可以在SqlTransaction类上使用Savestring savePointName方法。这将创建一个保存点,您可以在事务中回滚到该保存点。因此,如果部分代码失败,您将回滚到上一个保存点并重新开始

例如:

SqlTransaction tran = _transaction as SqlTransaction;
tran.Save(savePointName);
当你失败时,你会:

tran.Rollback(savePointName);

你可以想做多少次就做多少次。这将解决嵌套事务的问题。

这实际上是我想要的行为,但是如何使用SqlTransaction类来表达它?这实际上是我想要的行为,但是如何使用SqlTransaction类来表达它?