执行定位更新和删除语句

重要

Windows 的未来版本中将移除此功能。 请避免在新的开发工作中使用该功能,并着手修改当前还在使用该功能的应用程序。 Microsoft 建议使用驱动程序的游标功能。

使用 SQLFetchScroll 提取数据块后,应用程序可以更新或删除块中的数据。 若要执行定位更新或删除,应用程序:

  1. 调用 SQLSetPos 将光标置于要更新或删除的行上。

  2. 使用以下语法构造定位更新或删除语句:

    UPDATE 表名

    SET 列标识符 = {expression | NULL}

    [ 列标识符 = {表达式 | NULL}]

    WHERE CURRENT OF cursor-name

    DELETE FROM table-name WHERE CURRENT OF cursor-name

    在定位更新语句中构造 SET 子句的最简单方法是对要更新的每个列使用参数标记,并使用 SQLBindParameter 将这些参数绑定到要更新的行集缓冲区。 在这种情况下,参数的 C 数据类型将与行集缓冲区的 C 数据类型相同。

  3. 如果当前行将执行定位更新语句,则更新当前行的行集缓冲区。 成功执行定位更新语句后,游标库会将当前行中每列的值复制到其缓存中。

    注意

    如果在执行定位更新语句之前应用程序未正确更新行集缓冲区,则执行语句后缓存中的数据将不正确。

  4. 使用与游标关联的语句不同的语句执行定位更新或删除语句。

    注意

    由游标库构造的 WHERE 子句标识当前行可能无法标识任何行、标识其他行或标识多个行。 有关详细信息,请参阅 构造搜索语句

所有定位的更新和删除语句都需要游标名称。 若要指定游标名称,应用程序在打开游标之前调用 SQLSetCursorName 。 若要使用驱动程序生成的游标名称,应用程序在打开游标后调用 SQLGetCursorName

游标库执行定位更新或删除语句后,游标库维护的状态数组、行集缓冲区和缓存包含下表中显示的值。

使用的语句 行状态数组中的值

行集缓冲区


缓存缓冲区
定位更新 SQL_ROW_UPDATED 新值[1] 新值[1]
定位删除 SQL_ROW_DELETED 旧值 旧值

[1] 应用程序在执行定位更新语句之前,必须更新行集缓冲区中的值;执行定位更新语句后,游标库会将行集缓冲区中的值复制到其缓存中。