Freigeben über


Aktualisieren von Zeilen durch Textmarken mit SQLBulkOperations

Beim Aktualisieren einer Zeile nach Textmarke wird die Datenquelle von SQLBulkOperations zu einer oder mehreren Zeilen der Tabelle aktualisiert. Die Zeilen werden durch die Textmarke in einer gebundenen Textmarkenspalte identifiziert. Die Zeile wird mithilfe von Daten in den Anwendungspuffern für jede gebundene Spalte aktualisiert (außer wenn der Wert im Längen-/Indikatorpuffer für eine Spalte SQL_COLUMN_IGNORE ist). Ungebundene Spalten werden nicht aktualisiert.

So aktualisieren Sie Zeilen nach Textmarke mit SQLBulkOperations, der Anwendung:

  1. Ruft die Lesezeichen aller zu aktualisierenden Zeilen ab und speichert sie zwischen. Wenn mehr als eine Textmarke und spaltenweise Bindung verwendet wird, werden die Lesezeichen in einem Array gespeichert. Wenn mehr als eine Textmarke und zeilenweise Bindung verwendet wird, werden die Lesezeichen in einem Array von Zeilenstrukturen gespeichert.

  2. Legt das attribut der SQL_ATTR_ROW_ARRAY_SIZE-Anweisung auf die Anzahl der Lesezeichen fest und bindet den Puffer, der den Textmarkenwert oder das Array von Textmarken enthält, auf Spalte 0.

  3. Platziert die neuen Datenwerte in den Rowsetpuffern. Informationen zum Senden langer Daten mit SQLBulkOperations finden Sie unter Long Data and SQLSetPos and SQLBulkOperations.

  4. Legt den Wert im Längen-/Indikatorpuffer jeder Spalte bei Bedarf fest. Dies ist die Bytelänge der Daten oder SQL_NTS für Spalten, die an Zeichenfolgenpuffer gebunden sind, die Bytelänge der Daten für Spalten, die an binäre Puffer gebunden sind, und SQL_NULL_DATA, damit alle Spalten auf NULL festgelegt werden.

  5. Legt den Wert im Längen-/Indikatorpuffer dieser Spalten fest, die nicht auf SQL_COLUMN_IGNORE aktualisiert werden sollen. Obwohl die Anwendung diesen Schritt überspringen und vorhandene Daten erneut senden kann, ist dies ineffizient und riskiert das Senden von Werten an die Datenquelle, die beim Lesen abgeschnitten wurden.

  6. Ruft SQLBulkOperations auf, wobei das Argument Operation auf SQL_UPDATE_BY_BOOKMARK festgelegt ist.

Für jede Zeile, die als Aktualisierung an die Datenquelle gesendet wird, sollten die Anwendungspuffer über gültige Zeilendaten verfügen. Wenn die Anwendungspuffer durch Abrufen gefüllt wurden, wenn ein Zeilenstatusarray Standard tained wurde und der Statuswert für eine Zeile SQL_ROW_DELETED, SQL_ROW_ERROR oder SQL_ROW_NOROW ist, können versehentlich ungültige Daten an die Datenquelle gesendet werden.