创建并更改 RDO 客户端批处理

如果将 CursorDriver 设置为 rdUseClientBatch,那么可以使用 客户批处理游标库进行延迟或不延迟的批更新操作。为了选择理想的更新操作类型,请按照如下方式设置 OpenResultset 方法的 LockType 属性:

将 rdoResultset 从它的连接上断开

当 rdoResultset 被打开之后,可以立即开始修改。在完全置入到 rdConcurBatch 类型结果集之后,可以立即设置 ActiveConnection 属性为 Nothing,从而将 rdoResultset 从当前连接上断开。这时,可以对数据行进行添加、删除或其它更新操作。

修改结果集

要进行这样的修改,需要在使用 Edit、Delete 和 AddNew 方法之后执行 Update ,提交所作的修改。在所有修改全部完成之后,使用 BatchUpdate 方法将这批更新传递到数据库。BatchUpdate 方法对该 rdoResultset 进行扫描,检查每一行的 Status 属性(所有未经修改的数据行状态都被设为 rdRowUnmodified )。如果该行修改过,也就是说 Status 没有设为 rdRowUnmodified,客户批处理游标库将产生一个 SQL 查询来执行这些修改。该查询与用于本地结果集和远程服务器数据同步的其它 SQL 操作连接在一起。一旦所有的操作都包含进来,批更新开始执行(传递到远程服务器上去执行)。

设置 UpdateOperation 属性

UpdateOperation 属性决定了 RDO 和客户端的批处理游标如何对数据进行更新操作。一般来说,有两种办法:一步完成更新,或者特意将其分成二个独立的操作,先进行删除,然后插入。

注意   这与数据库触发器或参照完整性检查有关,可能无法执行单独的删除操作。

在很多情况下,更新操作都是由数据库引擎在内部处理的,它的处理方式为:先执行删除操作,然后立即执行对应的插入操作,两个操作被合并为一个原子事务。除非数据库引擎支持“现场更新”,而且更新操作满足进行这种更新的条件,否则,更新操作将以先删除、后插入的方式执行。

UpdateOperation 属性可以设置为下列常数之一,利用它可以确定 RDO 和 客户批处理游标库如何管理更新操作。

即使选择了 rdInsertDelete 选项,客户批处理游标库还是将操作封装在一个事务当中,以确保在操作失败时整个操作能够滚回。

设置 UpdateCriteria 属性

在对基本表中的数据行进行更新之前,可能需要知道该行是否被别人修改过,UpdateCriteria 属性可以决定 客户批处理游标库如何进行这种检查。在代码正在编辑该数据行时,如果其它用户已经修改了数据,该属性将采用一种 RDO 技术,确保不会随意覆盖其它用户作的修改。

通过设置 UpdateCriteria 属性,可以确定 RDO 如何建立 WHERE 子句,用于本地结果集和远程数据库表之间的同步。BatchUpdate 方法为 Status 属性不为 rdRowUnmodified 的每一个数据行创建一个 SQL 语句。每个语句都包含一个 WHERE 子句,唯一标识了受到影响的一行数据。通过调整 UpdateCriteria 属性,可以使应用程序适应于远程服务器的更新机制。例如,在某些服务器中,如果未被修改的数据列被包含在 SQL 更新内,触发器可能会被不必要地触发。

UpdateCriteria 属性决定如何标识单独的数据行,详细说明如下:

提示   如果使用 SQL Server 6.5,在执行批更新时,则可以使用 SQLTrace 工具来观察 RDO 如何建立 WHERE 子句。