JetEscrowUpdate-Funktion
Gilt für: Windows | Windows Server
JetEscrowUpdate-Funktion
Die JetEscrowUpdate-Funktion führt einen Atomaren Additionsvorgang für eine Spalte aus. Diese Funktion ermöglicht es mehreren Sitzungen, denselben Datensatz gleichzeitig ohne Konflikte zu aktualisieren.
JET_ERR JET_API JetEscrowUpdate(
__in JET_SESID sesid,
__in JET_TABLEID tableid,
__in JET_COLUMNID columnid,
__in void* pv,
__in unsigned long cbMax,
__out_opt void* pvOld,
__in unsigned long cbOldMax,
__out_opt unsigned long* pcbOldActual,
__in JET_GRBIT grbit
);
Parameter
sesid
Die Sitzung, die für diesen Aufruf verwendet werden soll.
tableid
Der Cursor, der für diesen Aufruf verwendet werden soll.
Columnid
Die Columnid der zu aktualisierenden Spalte.
pv
Ein Zeiger auf einen Puffer, der den Addend für die Spalte enthält.
cbMax
Die Größe des Puffers, der den Addend enthält.
pvOld
Der Ausgabepuffer, der den aktuellen Wert der Spalte empfängt, wie er in der Datenbank gespeichert ist (Versionsverwaltung wird ignoriert).
cbOldMax
Die maximale Größe des Ausgabepuffers, der den aktuellen Wert der Spalte empfängt. Derzeit wird nur JET_coltypLong unterstützt, sodass der Puffer entweder 4 Bytes oder 0 Bytes lang sein muss. Wenn pvOld NULL ist, sollte cbOldMax 0 sein.
pcbOldActual
Empfängt die tatsächliche Menge an Rohdaten, die im Ausgabepuffer empfangen werden.
grbit
Eine Gruppe von Bits, die null oder mehr der folgenden Optionen angibt.
Wert |
Bedeutung |
---|---|
JET_bitEscrowNoRollback |
Auch wenn für die Sitzung, in der das Escrow-Update ausgeführt wird, ein Transaktionsrollback ausgeführt wird, wird dieses Update nicht rückgängiggemacht. Beachten Sie, dass die zuletzt mit diesem Flag durchgeführten Escrow-Updates möglicherweise verloren gehen, wenn es zu einem Absturz kommt, da die Protokolldatensätze möglicherweise nicht auf den Datenträger geleert werden. |
Rückgabewert
Diese Funktion gibt den JET_ERR-Datentyp mit einem der folgenden Rückgabecodes zurück. Weitere Informationen zu möglichen ESE-Fehlern finden Sie unter Erweiterbare Speichermodulfehler und Fehlerbehandlungsparameter.
Rückgabecode |
Beschreibung |
---|---|
JET_errSuccess |
Der Vorgang wurde erfolgreich abgeschlossen. |
JET_errAlreadyPrepared |
Für den Cursor ist ein Update mit JetPrepareUpdate vorbereitet. |
JET_errClientRequestToStopJetService |
Es ist nicht möglich, den Vorgang abzuschließen, da alle Aktivitäten auf dem instance, die der Sitzung zugeordnet sind, aufgrund eines Aufrufs von JetStopService beendet wurden. |
JET_errInstanceUnavailable |
Es ist nicht möglich, den Vorgang abzuschließen, da beim instance, der der Sitzung zugeordnet ist, ein schwerwiegender Fehler aufgetreten ist, der erfordert, dass der Zugriff auf alle Daten widerrufen wird, um die Integrität dieser Daten zu schützen. Dieser Fehler wird nur von Windows XP und höheren Versionen zurückgegeben. |
JET_errInvalidBufferSize |
Eine ungültige Puffergröße wurde übergeben. Derzeit wird nur JET_coltypLong unterstützt, sodass der Puffer 4 Bytes betragen muss. |
JET_errInvalidOperation |
Es wurde eine ungültige Spalte angegeben. Die Spalte muss mit JET_bitColumnEscrowUpdate angegeben werden. Nur feste Spalten von JET_coltypLong können als Escrow-Aktualisierung angegeben werden. |
JET_errNoCurrentRecord |
Der Cursor muss sich in einem Datensatz befinden, um eine Spalte zu aktualisieren. |
JET_errNotInTransaction |
Escrow-Updates können nur von Sitzungen in einer Transaktion ausgeführt werden. |
JET_errNotInitialized |
Es ist nicht möglich, den Vorgang abzuschließen, da die der Sitzung zugeordnete instance noch nicht initialisiert wurde. |
JET_errPermissionDenied |
Der Cursor kann nicht schreibgeschützt sein und einen Datensatz aktualisieren. |
JET_errRestoreInProgress |
Es ist nicht möglich, den Vorgang abzuschließen, da auf dem der Sitzung zugeordneten instance ein Wiederherstellungsvorgang ausgeführt wird. |
JET_errSessionSharingViolation |
Dieselbe Sitzung kann nicht von mehreren Threads gleichzeitig verwendet werden. Dieser Fehler wird nur von Windows XP und höheren Versionen zurückgegeben. |
JET_errTermInProgress |
Es ist nicht möglich, den Vorgang abzuschließen, da die der Sitzung zugeordnete instance heruntergefahren wird. |
JET_errTransReadOnly |
Sitzung muss über Schreibberechtigungen verfügen, um einen Datensatz zu aktualisieren. |
JET_errWriteConflict |
Der Fehler, der zurückgegeben wird, wenn ein in Konflikt stehendes Update angefordert wird. |
Bemerkungen
Wenn zwei Sitzungen versuchen, einen Datensatz gleichzeitig zu aktualisieren, erhält die zweite Sitzung normalerweise einen JET_errWriteConflict Fehler, es sei denn, die Sitzungen sind vollständig serialisiert. Um zwei Sitzungen zu serialisieren, die denselben Datensatz aktualisieren, muss die zweite Sitzung ihre Transaktion starten, nachdem die erste Transaktion ihre Transaktion committen hat. Weitere Informationen finden Sie unter JetBeginTransaction .
Escrow kann mehrere Spalten im selben Datensatz aktualisieren. Die Updates wirken sich nicht gegenseitig aus.
Nur JetEscrowUpdate-Vorgänge sind miteinander kompatibel. Wenn zwei verschiedene Sitzungen versuchen, Updates vorzubereiten oder denselben Datensatz zu löschen, wird ein Schreibkonflikt generiert.
Sitzung B |
||||
---|---|---|---|---|
JetEscrowUpdate |
JET_errSuccess |
JET_errWriteConflict |
JET_errWriteConflict |
|
JET_errWriteConflict |
JET_errWriteConflict |
JET_errWriteConflict |
||
Sitzung A |
JET_errWriteConflict |
JET_errWriteConflict |
JET_errWriteConflict |
Escrow-Vorgänge werden versioniert und mithilfe von JetRollback rückgängiggemacht (es sei denn, es wurde JET_bitEscrowNoRollback angegeben). JetEscrowUpdate gibt den Rohwert der in der Datenbank gespeicherten Spalte zurück, da eine Anwendung möglicherweise eine spezielle Aktion ausführen möchte, wenn ein Sentinelwert erreicht wird. JetRetrieveColumn gibt die korrekt versionierte Ansicht der Spalte zurück, wobei Updates von gleichzeitigen Sitzungen ignoriert werden.
Wenn zwei Sitzungen in derselben Spalte desselben Datensatzes ausgeführt werden, können wir sehen, wie dies funktioniert. Angenommen, die Spalte beginnt mit dem Wert 0.
Sitzung |
Vorgang |
Gespeicherter Wert |
Rückgabewert |
---|---|---|---|
A |
|||
A |
0 |
||
A |
JetEscrowUpdate (4) |
4 |
0 |
A |
4 |
||
B |
|||
B |
0 |
||
B |
JetEscrowUpdate (3) |
7 |
4 |
B |
3 |
||
A |
JetEscrowUpdate (2) |
9 |
7 |
A |
JetEscrowUpdate (-7) |
2 |
9 |
B |
3 |
||
A |
-1 |
||
B |
-1 |
||
A |
-1 |
Das Ersetzen eines Datensatzes in derselben Transaktion, die Treuhandupdates für einen Datensatz ausführt, wird nicht empfohlen. Insbesondere, wenn ein Update für einen Datensatz mit einer JET_TABLEID vorbereitet wird und ein anderer JET_TABLEID verwendet wird, um den Datensatz zu aktualisieren, geht der aktualisierte Escrow verloren, wenn JetUpdate aufgerufen wird. Dies geschieht auch dann, wenn die Escrow-Spalte während des Updates nicht festgelegt wurde.
Wenn eine aktualisierbare Escrow-Spalte den Wert 0 aufweist, kann ein spezielles Verhalten ausgelöst werden. Dieses Verhalten tritt nur auf, wenn ein JetEscrowUpdate-Vorgang bewirkt, dass die Spalte den Wert 0 aufweist. Die Aktion erfolgt nicht sofort, sondern tritt irgendwann nach der Transaktion auf, wodurch die Spalte einen Wert von null Commits aufweist. Die Spalte muss weiterhin den Wert 0 aufweisen (d. a. wenn die Spalte von keiner anderen Sitzung geändert wurde). Wenn die Spalte mit JET_bitColumnDeleteOnZero erstellt wurde, wird der Datensatz, der die Spalte enthält, gelöscht. Wenn die Spalte mit JET_bitColumnFinalize erstellt wurde, wird ein Rückruf ausgegeben. Ein Absturz kann dazu führen, dass diese Aktionen nicht auftreten, aber die Onlinewartung (mithilfe der JetDefragment-Funktion ) wiederholt die Aktionen ordnungsgemäß.
Anforderungen
Anforderung | Wert |
---|---|
Client |
Erfordert Windows Vista, Windows XP oder Windows 2000 Professional. |
Server |
Erfordert Windows Server 2008, Windows Server 2003 oder Windows 2000 Server. |
Kopfzeile |
Deklariert in Esent.h. |
Bibliothek |
Verwenden Sie ESENT.lib. |
DLL |
Erfordert ESENT.dll. |
Weitere Informationen
JET_COLUMNID
JET_ERR
JET_GRBIT
JET_SESID
JET_TABLEID
JetBeginTransaction
JetDefragmentierung
JetPrepareUpdate
JetRetrieveColumn
JetRollback
JetStopService
JetUpdate