Поделиться через


Обновление строк по закладке с помощью SQLBulkOperations

При обновлении строки по закладке SQLBulkOperations заставляет источник данных обновлять одну или несколько строк таблицы. Строки идентифицируются закладкой в связанном столбце с закладками. Строка обновляется с помощью данных в буферах приложения для каждого связанного столбца, за исключением тех случаев, когда значение в буфере длины/индикаторном буфере для столбца равно SQL_COLUMN_IGNORE. Несвязанные столбцы не будут обновлены.

Чтобы обновить строки по закладке с помощью SQLBulkOperations, приложение:

  1. Извлекает и кэширует закладки всех строк, которые необходимо обновить. Если используется несколько закладок и привязка по столбцам, закладки хранятся в массиве; Если используется несколько закладок и привязка по строкам, закладки хранятся в массиве структур строк.

  2. Задает атрибут оператора SQL_ATTR_ROW_ARRAY_SIZE число закладок и привязывает буфер, содержащий значение закладки, или массив закладок, к столбцу 0.

  3. Помещает новые значения данных в буферы набора строк. Сведения о том, как отправлять длинные данные с помощью SQLBulkOperations, см. в разделе Long Data и SQLSetPos и SQLBulkOperations.

  4. Задает значение в буфере длины или индикатора каждого столбца по мере необходимости. Это длина байтов данных или SQL_NTS столбцов, привязанных к строковым буферам, длина байтов данных для столбцов, привязанных к двоичным буферам, и SQL_NULL_DATA для всех столбцов, которые должны иметь значение NULL.

  5. Устанавливает значение в буфере длины или индикатора для тех столбцов, которые не должны обновляться, в SQL_COLUMN_IGNORE. Хотя приложение может пропустить этот шаг и повторно отправить существующие данные, это неэффективно и может привести к отправке в источник данных значений, которые были усечены при чтении.

  6. Вызывает SQLBulkOperations с аргументом Operation, установленным в SQL_UPDATE_BY_BOOKMARK.

Для каждой строки, отправляемой источнику данных в качестве обновления, буферы приложений должны иметь допустимые данные строк. Если буферы приложения были заполнены извлечением данных, если массив состояния строки был сохранен, и если значение состояния для строки - это SQL_ROW_DELETED, SQL_ROW_ERROR или SQL_ROW_NOROW, недопустимые данные могут быть ненамеренно отправлены в источник данных.