0

假设我有从 c# 代码执行的多个存储过程的代码。每个存储过程都有一个提交和一个在异常情况下的回滚。异常在这些存储过程中进行处理并返回已处理的错误消息。

如果我有一个 OracleTransaction.BeginTransaction()“正在运行”,那么在执行存储过程时,在同一连接对象上,c# 代码中的 OracleTransaction.Rollback() 实际上会回滚先前执行的存储过程提交的数据。

逻辑如下:

  1. 打开连接
  2. 开始交易
  3. 执行一个存储过程(内部有提交)
  4. 如果一切正常,执行另一个存储过程(带提交)。如果不是,则回滚先前的存储过程并完全停止。
  5. 没有错误提交事务。谢谢你。
4

1 回答 1

2

ACOMMIT结束当前事务,新事务从下一个可执行 SQL 语句开始。因此,后续ROLLBACK只能撤消上一个以来所做的更改COMMIT,但不能撤消之前的更改。

于 2017-06-01T17:00:02.770 回答