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 ohne Konflikte gleichzeitig 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 Add-On für die Spalte enthält.
cbMax
Die Größe des Puffers, der das Add-In enthält.
pvOld
Der Ausgabepuffer, der den aktuellen Wert der Spalte erhält, wie er in der Datenbank gespeichert ist (Die Versionsspeicherung wird ignoriert).
cbOldMax
Die maximale Größe des Ausgabepuffers, der den aktuellen Wert der Spalte erhält. Derzeit wird JET_coltypLong unterstützt, sodass der Puffer entweder 4 Byte oder 0 Byte lang sein muss. Wenn pvOld NULL ist, sollte cbOldMax 0 sein.
–OldActual
Empfängt die tatsächliche Menge an Rohwertdaten, die im Ausgabepuffer empfangen werden.
grbit
Eine Gruppe von Bits, die null oder mehr der folgenden Optionen an geben.
Wert |
Bedeutung |
|---|---|
JET_bitEscrowNoRollback |
Auch wenn für die Sitzung, die das Escrow-Update ausgeführt hat, ein Transaktionsrollback ausgeführt wird, wird dieses Update nicht rückgängig gemacht. Da die Protokolldatensätze möglicherweise nicht auf den Datenträger geleert werden, gehen aktuelle, mit diesem Flag durchgeführte Escrow-Updates möglicherweise verloren, wenn es zu einem Absturz kommt. |
Rückgabewert
Diese Funktion gibt den JET_ERR datentyp mit einem der folgenden Rückgabecodes zurück. Weitere Informationen zu den möglichen ESE-Fehlern finden Sie unter Extensible Storage Engine Errors and Error Handling Parameters.
Rückgabecode |
Beschreibung |
|---|---|
JET_errSuccess |
Der Vorgang wurde erfolgreich abgeschlossen. |
JET_errAlreadyPrepared |
Der Cursor verfügt über ein Update, das mit JetPrepareUpdate vorbereitet wurde. |
JET_errClientRequestToStopJetService |
Es ist nicht möglich, den Vorgang abschließen, da alle Aktivitäten auf der -Instanz, die der Sitzung zugeordnet ist, aufgrund eines Aufrufs von JetStopService beendet wurden. |
JET_errInstanceUnavailable |
Der Vorgang kann nicht abgeschlossen werden, da für die der Sitzung zugeordnete Instanz 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 xp Windows und späteren Versionen zurückgegeben. |
JET_errInvalidBufferSize |
Eine ungültige Puffergröße wurde übergeben. Derzeit wird nur JET_coltypLong unterstützt, sodass der Puffer 4 Byte betragen muss. |
JET_errInvalidOperation |
Eine ungültige Spalte wurde angegeben. Die Spalte muss mit dem angegebenen JET_bitColumnEscrowUpdate werden. Nur feste Spalten JET_coltypLong können als escrow updateable angegeben werden. |
JET_errNoCurrentRecord |
Der Cursor muss sich in einem Datensatz befindet, um eine Spalte zu aktualisieren. |
JET_errNotInTransaction |
Escrow-Updates können nur von Sitzungen in einer Transaktion ausgeführt werden. |
JET_errNotInitialized |
Der Vorgang kann nicht abgeschlossen werden, da die der Sitzung zugeordnete Instanz noch nicht initialisiert wurde. |
JET_errPermissionDenied |
Der Cursor kann nicht schreibgeschützt sein und einen Datensatz aktualisieren. |
JET_errRestoreInProgress |
Der Vorgang kann nicht abgeschlossen werden, da ein Wiederherstellungsvorgang für die -Instanz durchgeführt wird, die der Sitzung zugeordnet ist. |
JET_errSessionSharingViolation |
Dieselbe Sitzung kann nicht von mehr als einem Thread gleichzeitig verwendet werden. Dieser Fehler wird nur von xp Windows und späteren Versionen zurückgegeben. |
JET_errTermInProgress |
Der Vorgang kann nicht abgeschlossen werden, da die der Sitzung zugeordnete Instanz heruntergefahren wird. |
JET_errTransReadOnly |
Die Sitzung muss über Schreibberechtigungen zum Aktualisieren eines Datensatzes verfügen. |
JET_errWriteConflict |
Der Fehler, der zurückgegeben wird, wenn ein in Konflikt stehend angezeigtes Update angefordert wird. |
Bemerkungen
Wenn zwei Sitzungen versuchen, einen Datensatz gleichzeitig zu aktualisieren, erhält die zweite Sitzung normalerweise einen Fehler JET_errWriteConflict, 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 einen Commit für die Transaktion ausgeführt hat. Weitere Informationen finden Sie unter JetBeginTransaction.
Mehrere Spalten im gleichen Datensatz können aktualisiert werden. 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 mit JetRollback rückgängig gemacht (es sei denn, JET_bitEscrowNoRollback wurde angegeben). JetEscrowUpdate gibt den Rohwert der in der Datenbank gespeicherten Spalte zurück, da eine Anwendung möglicherweise eine besondere Aktion ausführen möchte, wenn ein Sentinelwert getroffen wird. JetRetrieveColumn gibt die Ansicht mit der richtigen Version der Spalte zurück, wobei Updates von gleichzeitigen Sitzungen ignoriert werden.
Bei zwei Sitzungen, die auf derselben Spalte desselben Datensatzes arbeiten, können wir sehen, wie dies funktioniert. Angenommen, die Spalte beginnt mit dem Wert 0.
Sitzung |
Vorgang |
Gespeicherter Wert |
Rückgabewert |
|---|---|---|---|
Ein |
|||
Ein |
0 |
||
Ein |
JetEscrowUpdate (4) |
4 |
0 |
Ein |
4 |
||
B |
|||
B |
0 |
||
B |
JetEscrowUpdate (3) |
7 |
4 |
B |
3 |
||
Ein |
JetEscrowUpdate (2) |
9 |
7 |
Ein |
JetEscrowUpdate (-7) |
2 |
9 |
B |
3 |
||
Ein |
-1 |
||
B |
-1 |
||
Ein |
-1 |
Es wird nicht empfohlen, einen Datensatz in derselben Transaktion zu ersetzen, die Escrow-Updates für einen Datensatz ausführt. Insbesondere wenn ein Update für einen Datensatz mit einem JET_TABLEID vorbereitet wird und eine andere JET_TABLEID verwendet wird, um den Datensatz zu aktualisieren, geht die aktualisierte Füllung verloren, wenn JetUpdate aufgerufen wird. Dies geschieht auch, wenn die Spalte escrow während des Updates nicht festgelegt wurde.
Wenn eine spalte, die aktualisierbar ist, den Wert 0 hat, kann ein besonderes Verhalten ausgelöst werden. Dieses Verhalten tritt nur auf, wenn ein JetEscrowUpdate-Vorgang bewirkt, dass die Spalte den Wert 0 (null) hat. Die Aktion findet nicht sofort statt, sondern tritt irgendwann nach der Transaktion auf, die dazu geführt hat, dass die Spalte den Wert 0 (null) Commits hat. Die Spalte muss weiterhin den Wert 0 (null) aufweisen (d. b. wenn die Spalte von keiner anderen Sitzung geändert wurde). Wenn die Spalte mit JET_bitColumnDeleteOnZero erstellt wurde, wird der Datensatz mit der Spalte 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 ausgeführt werden, aber bei der Onlinewartung (mit der JetDefragment-Funktion) werden die Aktionen ordnungsgemäß wiederholt.
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. |
Header |
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
JetDefragment
JetPrepareUpdate
JetRetrieveColumn
JetRollback
JetStopService
JetUpdate