Aktualisieren von Daten in SQL Server-Cursorn in SQL Server Native Client
Gilt für: SQL Server Azure SQL-Datenbank Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW)
Beim Abrufen und Aktualisieren von Daten über SQL Server-Cursor ist eine SQL Server Native Client OLE DB-Anbieter-Consumeranwendung an dieselben Überlegungen und Einschränkungen gebunden, die für jede andere Clientanwendung gelten.
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-Anbieter von SQL Server Native Client die durch DBPROPVAL_TI_READCOMMITTED angegebene Isolationsstufe mit lesesicheren Daten. Der OLE DB-Anbieter des nativen SQL Server-Clients unterstützt die Schreibisolation, wenn die Zeilensatzkoncurrency 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-Anbieter des SQL Server Native Client, jede angegebene Zeile zu verarbeiten. Ein Fehler aufgrund ungültiger Daten, Längen oder Statuswerte für eine Zeile beendet die SQL Server Native Client OLE DB-Anbieterverarbeitung nicht. 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 einen Fehler für eine bestimmte Zeile zu ermitteln, wenn der OLE DB-Anbieter von SQL Server Native Client 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.