Freigeben über


Aktualisieren von Daten in SQL Server-Cursorn

Gilt für: SQL Server Azure SQL-Datenbank Azure SQL verwaltete Instanz Azure Synapse Analytics Analytics Platform System (PDW)

OLE DB-Treiber herunterladen

Beim Abrufen und Aktualisieren von Daten mit SQL Server-Cursorn gelten für eine Consumeranwendung des OLE DB-Treibers für SQL Server die gleichen Überlegungen und Einschränkungen wie für jede andere Clientanwendung.

Nur Zeilen in SQL Server-Cursorn nehmen an der gleichzeitigen Datenzugriffssteuerung teil. Wenn der Consumer ein änderbares Rowset anfordert, wird die Parallelitätssteuerung von DBPROP_LOCKMODE kontrolliert. Um die Steuerungsebene für den gleichzeitigen Zugriff zu ändern, legt der Consumer die DBPROP_LOCKMODE-Eigenschaft vor dem Öffnen des Rowsets fest.

Transaktionsisolationsstufen können zu beträchtlichen Verzögerungen bei der Zeilenpositionierung führen, wenn Transaktionen aufgrund des Designs der Clientanwendung über längere Zeit geöffnet bleiben. Standardmäßig verwendet der OLE DB-Treiber für SQL Server die von DBPROPVAL_TI_READCOMMITTED angegebene READ COMMITTED-Isolationsstufe. Der OLE DB-Treiber für SQL Server unterstützt die Dirty-Read-Isolation, wenn die Rowsetparallelität schreibgeschützt ist. Daher kann der Consumer in einem änderbaren Rowset eine höhere Isolationsstufe jedoch keine niedrigere Stufe erfolgreich anfordern.

Unmittelbarer und verzögerter Updatemodus

Im Sofortupdatemodus verursacht jeder Aufruf von IRowsetChange::SetData einen Roundtrip zu SQL Server. Wenn der Consumer mehrere Änderungen an einer einzelnen Zeile vornimmt, ist es effizienter, alle Änderungen mit einem einzigen SetData-Aufruf zu übergeben.

Im verzögerten Updatemodus wird für jede im cRows-Parameter und rghRows-Parameter von IRowsetUpdate::Update angegebene Zeile ein Roundtrip zu SQL Server durchgeführt.

In beiden Modi stellt ein Roundtrip eine separate Transaktion dar, wenn kein Transaktionsobjekt für das Rowset geöffnet ist.

Wenn Sie IRowsetUpdate::Update verwenden, versucht der OLE DB-Treiber für SQL Server jede angegebene Zeile zu verarbeiten. Die Verarbeitung durch den OLE DB-Treiber für SQL Server wird durch einen Fehler aufgrund ungültiger Daten-, Längen- oder Statuswerte einer Zeile nicht angehalten. Es können nur alle oder keine der anderen am Update beteiligten Zeilen geändert werden. Der Consumer muss das zurückgegebene prgRowStatus-Array untersuchen, um bestimmte Zeilen auf Fehler zu überprüfen, wenn der OLE DB-Treiber für SQL Server DB_S_ERRORSOCCURRED zurückgibt.

Ein Consumer darf nicht davon ausgehen, dass Zeilen in einer bestimmten Reihenfolge verarbeitet werden. Wenn ein Consumer es erfordert, dass die Verarbeitung von Datenänderungen in mehr als einer Zeile in einer bestimmten Reihenfolge durchgeführt wird, muss der Consumer diese Reihenfolge in der Anwendungslogik festlegen und eine Transaktion öffnen, um den Prozess darin einzuschließen.

Weitere Informationen

Aktualisieren von Daten in Rowsets