SQLBulkOperations を使ったブックマークによる行の更新

ブックマークによって行を更新すると、SQLBulkOperations はデータ ソースにテーブルの 1 つ以上の行が更新させます。 行は、バインドされたブックマーク列のブックマークによって識別されます。 行は、バインドされた各列のアプリケーション バッファー内のデータを使用して更新されます (列の長さ/インジケーター バッファーの値が 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. Operation 引数を SQL_UPDATE_BY_BOOKMARK に設定して SQLBulkOperations を呼び出します。

更新プログラムとしてデータ ソースに送信されるすべての行について、アプリケーション バッファーには有効な行データが必要です。 アプリケーション バッファーがフェッチによっていっぱいになった場合、行の状態配列が維持されていて、行の状態値が SQL_ROW_DELETED、SQL_ROW_ERROR、または SQL_ROW_NOROW の場合、無効なデータが誤ってデータ ソースに送信される可能性があります。