ODAC中事务处理(缓存提交模式)
使用CachedUpdates属性可以为数据集启用或禁用缓存更新。 将CachedUpdates设置为True可将对数据集的更新存储在客户端的内部缓存中,而不是直接写入数据集的对应的数据库表中。 数据处理完成后,将所有缓存的更改写入数据库。
property CachedUpdates: boolean default False;
相关函数
procedure ApplyUpdates; overload; virtual; //将数据集的暂挂缓存更新写入数据库。
procedure RestoreUpdates; //将更新缓存中的所有记录标记为未更新状态。
procedure CommitUpdates; //清除缓存的更新缓冲区,标记为提交状态。
procedure CancelUpdates; //从缓存中清除所有未提交(CommitUpdates)的缓存更新,并将数据集恢复为其先前状态。
用法
OraSession.StartTransaction; try //数据处理 OraQuery1.ApplyUpdates; //尝试将OraQuery1更新写入数据库 OraQuery2.ApplyUpdates; //尝试将OraQuery2更新写入数据库 OraSession.Commit; //成功后,提交更改 except OraQuery1.RestoreUpdates; //恢复OraQuery1中记录的更新状态 OraQuery2.RestoreUpdates; //恢复OraQuery2中记录的更新状态 OraSession.Rollback; //失败后,撤消更改 //处理异常(引发异常或离开),防止继续进行 end; OraQuery1.CommitUpdates; //成功后,清除OraQuery1的缓存 OraQuery2.CommitUpdates; //成功后,清除OraQuery2的缓存
备注
调用TOraSession.ApplyUpdates方法,将连接当前Session的所有CachedUpdates为True数据集中所有暂挂的缓存更新写入数据库中。 ApplyUpdates方法将缓存的数据传递到数据库,负责提交或回滚事务,并在操作成功时清除缓存。
使用TOraSession.ApplyUpdates是更新数据集的首选方法,而不是调用每个单独数据集的ApplyUpdates方法。
//设置连接 OraQuery1.Session := OraSession; OraQuery1.CachedUpdates := True; OraQuery2.Session := OraSession; OraQuery2.CachedUpdates := True; try //数据处理 OraSession.ApplyUpdates; //尝试将连接到OraSession的OraQuery1和OraQuery2的缓存更新写入数据库 //成功后,自动提交更改。失败后,自动撤消更改 //Commit成功后,自动清除OraQuery1和OraQuery2的缓存 except OraQuery1.RestoreUpdates; //恢复OraQuery1和OraQuery2中记录的更新状态 OraQuery2.RestoreUpdates; end;