使用 SQLBulkOperations 通过书签更新行

当通过书签更新行时,SQLBulkOperations 使数据源更新表中的一行或多行。 行由书签标识于绑定书签列中。 该行使用每个绑定列的应用程序缓冲区中的数据进行更新(除非长度/指示器缓冲区中的值为SQL_COLUMN_IGNORE)。 不会更新未绑定的列。

若要使用 SQLBulkOperations 按书签更新行,应用程序:

  1. 检索和缓存要更新的所有行的书签。 如果使用多个书签和列式绑定,则书签存储在数组中;如果使用多个书签,并且使用行顺序绑定,则书签存储在行结构数组中。

  2. 将 SQL_ATTR_ROW_ARRAY_SIZE 语句属性设置为书签数,并将包含书签值的缓冲区或书签数组绑定到第 0 列。

  3. 将新数据值放在行集缓冲区中。 有关如何使用 SQLBulkOperations 发送长数据的信息,请参阅 Long Data 和 SQLSetPos 和 SQLBulkOperations

  4. 根据需要设置每个列的长度/指示器缓冲区中的值。 这是绑定到字符串缓冲区的列的字节长度或SQL_NTS,绑定到二进制缓冲区的列的字节长度,对于需要设置为NULL的任何列,则为SQL_NULL_DATA。

  5. 将不需要更新的列的长度/指示器缓冲区中的值设置为SQL_COLUMN_IGNORE。 尽管应用程序可以跳过此步骤并重新发送现有数据,但这效率低下,并有可能将值发送到读取时截断的数据源。

  6. 调用SQLBulkOperations,并将Operation参数设置为SQL_UPDATE_BY_BOOKMARK。

对于作为更新发送到数据源的每一行,应用程序缓冲区应具有有效的行数据。 如果通过提取来填充应用程序缓冲区,并且如果维护了行状态数组,并且行的状态值是SQL_ROW_DELETED、SQL_ROW_ERROR或SQL_ROW_NOROW,则可能会无意中将无效数据发送到数据源。