执行定位更新和删除语句
重要
Windows 的未来版本中将移除此功能。 请避免在新的开发工作中使用该功能,并着手修改当前还在使用该功能的应用程序。 Microsoft 建议使用驱动程序的游标功能。
使用 SQLFetchScroll 提取数据块后,应用程序可以更新或删除块中的数据。 若要执行定位更新或删除,应用程序:
调用 SQLSetPos 将光标置于要更新或删除的行上。
使用以下语法构造定位更新或删除语句:
UPDATE 表名
SET 列标识符 = {expression | NULL}
[, 列标识符 = {表达式 | NULL}]
WHERE CURRENT OF cursor-name
DELETE FROM table-name WHERE CURRENT OF cursor-name
在定位更新语句中构造 SET 子句的最简单方法是对要更新的每个列使用参数标记,并使用 SQLBindParameter 将这些参数绑定到要更新的行集缓冲区。 在这种情况下,参数的 C 数据类型将与行集缓冲区的 C 数据类型相同。
如果当前行将执行定位更新语句,则更新当前行的行集缓冲区。 成功执行定位更新语句后,游标库会将当前行中每列的值复制到其缓存中。
注意
如果在执行定位更新语句之前应用程序未正确更新行集缓冲区,则执行语句后缓存中的数据将不正确。
使用与游标关联的语句不同的语句执行定位更新或删除语句。
注意
由游标库构造的 WHERE 子句标识当前行可能无法标识任何行、标识其他行或标识多个行。 有关详细信息,请参阅 构造搜索语句。
所有定位的更新和删除语句都需要游标名称。 若要指定游标名称,应用程序在打开游标之前调用 SQLSetCursorName 。 若要使用驱动程序生成的游标名称,应用程序在打开游标后调用 SQLGetCursorName 。
游标库执行定位更新或删除语句后,游标库维护的状态数组、行集缓冲区和缓存包含下表中显示的值。
使用的语句 | 行状态数组中的值 | 值 行集缓冲区 |
值 缓存缓冲区 |
---|---|---|---|
定位更新 | SQL_ROW_UPDATED | 新值[1] | 新值[1] |
定位删除 | SQL_ROW_DELETED | 旧值 | 旧值 |
[1] 应用程序在执行定位更新语句之前,必须更新行集缓冲区中的值;执行定位更新语句后,游标库会将行集缓冲区中的值复制到其缓存中。