分享方式:


使用 SQLBulkOperations 依書籤更新資料列

依書籤更新資料列時,SQLBulkOperations 會讓資料來源更新資料表的一個或多個資料列。 資料列是由繫結書籤資料行中的書籤所識別。 系統會使用應用程式緩衝區中的資料,為每個繫結資料行更新資料列 (資料行的長度/指標緩衝區中的值為 SQL_COLUMN_IGNORE 時除外)。 未繫結的資料列不會更新。

若要使用 SQLBulkOperations 依書籤更新資料列,應用程式會採取以下行動:

  1. 擷取並快取所有待更新資料列的書籤。 如果使用多個書籤和資料行取向的繫結,則書籤會儲存在陣列中;如果使用多個書籤和資料列取向的繫結,則書籤會儲存在資料列結構的陣列中。

  2. 將 SQL_ATTR_ROW_ARRAY_SIZE 陳述式屬性設定為書籤數目,並將包含書籤值的緩衝區或書籤陣列繫結至資料行 0。

  3. 將新的資料值放在資料列集緩衝區中。 如需使用 SQLBulkOperations 傳送長資料的資訊,請參閱長資料和 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,可能會不慎將不正確的資料傳送至資料來源。