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

JetPrepareUpdate

JetDelete

JetEscrowUpdate

JET_errSuccess

JET_errWriteConflict

JET_errWriteConflict

JetUpdate

JET_errWriteConflict

JET_errWriteConflict

JET_errWriteConflict

Sitzung A

JetDelete

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

JetBeginTransation

Ein

JetBeginTransation

0

Ein

JetEscrowUpdate (4)

4

0

Ein

JetRetrieveColumn

4

B

JetBeginTransaction

B

JetRetrieveColumn

0

B

JetEscrowUpdate (3)

7

4

B

JetRetrieveColumn

3

Ein

JetEscrowUpdate (2)

9

7

Ein

JetEscrowUpdate (-7)

2

9

B

JetRetrieveColumn

3

Ein

JetRetrieveColumn

-1

B

JetRollback

-1

Ein

JetRetrieveColumn

-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