使用 SQLSetPos 更新数据

应用程序可以使用 SQLSetPos 更新或删除行集中的任何行。 调用 SQLSetPos 是构造和执行 SQL 语句的便捷替代方法。 它允许 ODBC 驱动程序支持定位更新,即使数据源不支持定位的 SQL 语句。 它是通过函数调用实现完整数据库访问的范例的一部分。

SQLSetPos 对当前行集进行操作,且只能在调用 SQLFetchScroll 后使用。 应用程序会指定要更新、删除或插入的行号,驱动程序会从行集缓冲区中检索该行的新数据。 SQLSetPos 还可用于将指定行指定为当前行,或从数据源刷新行集中的特定行。

行集大小是通过调用 SQLSetStmtAttr 来设置的,其 Attribute 参数为 SQL_ATTR_ROW_ARRAY_SIZE。 但是,只有在调用 SQLFetch 或 SQLFetchScroll 之后,SQLSetPos 才会使用新的行集大小。 例如,如果更改了行集大小,则调用 SQLSetPos,然后调用 SQLFetch 或 SQLFetchScroll,而对 SQLSetPos 的调用将使用旧的行集大小,而 SQLFetch 或 SQLFetchScroll 则使用新的行集大小。

行集中的第一行的行编号为 1。 SQLSetPos 中的 RowNumber 参数必须标识行集中的行;也就是说,其值必须介于 1 和最近提取的行数之间(可能小于行集大小)。 如果 RowNumber 为 0,将对行集中的所有行应用操作。

由于大多数与关系数据库的交互都是通过 SQL 完成的,因此 SQLSetPos 没有得到广泛支持。 但是,驱动程序可以通过构造和执行 UPDATE、DELETE 语句轻松地对它进行模拟。

若要确定 SQLSetPos 支持哪些操作,应用程序可以使用 SQL_DYNAMIC_CURSOR_ATTRIBUTES1、SQL_FORWARD_ONLY_CURSOR_ATTRIBUTES1、SQL_KEYSET_CURSOR_ATTRIBUTES1 或 SQL_STATIC_CURSOR_ATTRIBUTES1 信息选项来调用 SQLGetInfo(具体取决于游标的类型)。

本部分包含以下主题。