键集游标
此键集在其检测更改的功能方面,提供了介于静态和动态游标之间的功能。 比如静态游标,它不会始终检测对结果集的成员身份和顺序的更改。 比如动态游标,它会检测对结果集中的行值的更改。
由键集驱动的游标由一组唯一标识符(键)控制,这组键称为键集。 键是根据以唯一方式标识结果集中各行的一组列生成的。 键集是查询语句返回的所有行中的一组键值。
使用由键集驱动的游标,为游标中的每行生成和保存一个键,并将其存储在客户端工作站或服务器上。 访问每行时,存储的密钥可用来从数据源提取当前数据值。 在由键集驱动的游标中,如果键集完全填充,将冻结结果集成员身份。 此后,在重新打开结果集前,都不会执行影响成员身份的添加或更新操作。
当用户滚动浏览结果集时,对数据值的更改(由键集所有者或其他进程执行)是可见的。 游标外所做的插入(由其他进程执行)仅在关闭并重新打开游标后可见。 游标内部所做的插入在结果集的末尾可见。
当由键集驱动的游标尝试检索已删除的行时,该行在结果集中显示为“缺口”。 行键存在于键集中,但行不再存在于结果集中。 如果一行中的键值有所更新,该行会被视为已删除,然后是已插入,因此这样的行在结果集中也显示为缺口。 由键集驱动的游标始终可以检测由其他进程删除的行,但它也可以选择移除它自己删除的行键。 执行此操作的由键集驱动的游标无法检测自己删除的行,因为证据已被移除。
对键列进行更新与删除旧键然后插入新键的作用相同。 如果更新不是通过游标进行的,则新键值不可见。 如果更新是通过游标进行的,则结果集末尾会显示新的键值。
由键集驱动的游标有一个变体,称为“由键集驱动的标准游标”。 在由键集驱动的标准游标中,结果集中的行成员身份和行的顺序在游标打开时是固定的,但由游标所有者进行的值更改和由其他进程提交的更改是可见的。 如果更改取消了一个行的成员资格或影响了一个行的顺序,则该行不会消失或移动,除非关闭并重新打开了游标。 插入的数据不会显示,但对现有数据的更改会在提取行时显示。
由键集驱动的游标很难正确使用,因为对数据更改的敏感度取决于许多不同的情况,如上文所述。 但是,如果你的应用程序与并发更新无关,可以通过编程方式处理错误键,并且必须直接访问某些键控行,那么由键集驱动的游标可能适合你使用。 使用 adOpenKeyset CursorTypeEnum 指示要在 ADO 中使用键集游标。