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


Обновление строк по закладкам с помощью 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 с аргументом операции , заданным для SQL_UPDATE_BY_BOOKMARK.

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