JetSetSessionContext-Funktion
Gilt für: Windows | Windows Server
JetSetSessionContext-Funktion
Die JetSetSessionContext-Funktion ordnet dem aktuellen Thread mithilfe des angegebenen Kontexthandle eine Sitzung zu. Diese Zuordnung überschreibt die Standard-Engine-Anforderung, dass eine Transaktion für eine bestimmte Sitzung vollständig im selben Thread erfolgen muss.
JET_ERR JET_API JetSetSessionContext(
__in JET_SESID sesid,
__in JET_API_PTR ulContext
);
Parameter
sesid
Die Sitzung, die für diesen Aufruf verwendet werden soll.
ulContext
Ein eindeutiger Bezeichner, dem diese Sitzung zugeordnet wird.
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_errClientRequestToStopJetService |
Der Vorgang kann nicht abgeschlossen werden, da alle Aktivitäten auf der Instanz, die der Sitzung zugeordnet ist, aufgrund eines Aufrufs von JetStopServicebeendet wurden. |
JET_errInstanceUnavailable |
Der Vorgang kann nicht abgeschlossen werden, da für die Instanz, die 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. Windows XP: Dieser Rückgabewert wird in Windows XP eingeführt. |
JET_errInvalidParameter |
Einer der bereitgestellten Parameter enthielt einen unerwarteten Wert, oder die Kombination mehrerer Parameterwerte führte zu einem unerwarteten Ergebnis. Dieser Fehler wird von JetSetSessionContext unter den folgenden Bedingungen zurückgegeben:
|
JET_errNotInitialized |
Der Vorgang kann nicht abgeschlossen werden, da die Instanz, die der Sitzung zugeordnet ist, noch nicht initialisiert wurde. |
JET_errRestoreInProgress |
Der Vorgang kann nicht abgeschlossen werden, da ein Wiederherstellungsvorgang für die Instanz ausgeführt wird, die der Sitzung zugeordnet ist. |
JET_errSessionContextAlreadySet |
Die Sitzung konnte dem aktuellen Thread nicht zugeordnet werden, da sie bereits einem Thread zugeordnet wurde. |
JET_errTermInProgress |
Der Vorgang kann nicht abgeschlossen werden, da die instanz, die der Sitzung zugeordnet ist, heruntergefahren wird. |
Wenn diese Funktion erfolgreich ist, wird die Sitzung dem aktuellen Thread zugeordnet. Es wird keine Änderung am Datenbankzustand vorgenommen.
Wenn diese Funktion fehlschlägt, bleibt der Sitzungszustand unverändert. Es wird keine Änderung am Datenbankzustand vorgenommen.
Bemerkungen
Eine Sitzung ist normalerweise für die Dauer einer Transaktion an einen bestimmten Thread gebunden. Dieses Verhalten soll Anwendungen dabei helfen, die konzeptionell falsch empfohlenen Freigaben einer einzelnen Sitzung zwischen mehreren Threads zu erkennen und zu verhindern. Manchmal funktioniert diese einfache Überprüfung nicht mit der Architektur der Anwendung. Wenn die Anwendung beispielsweise serverseitige Objekte mithilfe eines Threadpools hostet und Transaktionen mehrere Serveraufrufe an ein bestimmtes Objekt umfassen, kann dieser Schutz dazu führen, dass einige dieser Aufrufe mit JET_errSessionSharingViolation fehlschlagen, obwohl das Verwendungsmuster richtig ist. Diese Situation ist bei COM-Objektservern üblich.
JetSetSessionContext und JetResetSessionContext lösen dieses Problem, indem sie die Sitzungsfreigabeprüfung etwas flexibler gestalten. Wenn die Anwendung beginnt, eine Reihe von ESE-API-Aufrufen mit einer bestimmten Sitzung vorzunehmen, legt sie zuerst den Sitzungskontext auf einen bestimmten Wert fest. Diese Aktion ordnet die Sitzung dem aufrufenden Thread zu. Im angegebenen Beispiel kann dieser Kontext die Adresse des Objekts sein, das das JET-Sitzungshandle enthält. Sobald die ESE-API-Aufrufe durchgeführt wurden, setzt die Anwendung den Sitzungskontext zurück. Diese Aktion trennt die Zuordnung der Sitzung zum aufrufenden Thread. Das Objekt und seine Sitzung können dann auch dann von einem anderen Thread verwendet werden, wenn die Sitzung über eine aktive Transaktion verfügt.
Es ist wichtig zu beachten, dass JetSetSessionContext aufgerufen werden muss, bevor eine Transaktion für diese Sitzung geöffnet wird. Andernfalls funktioniert die Zuordnung nicht.
JetSetSessionContext ist threadsicher. Mehrere Threads können gleichzeitig versuchen, einen Threadkontext in derselben Sitzung festzulegen, und nur einer gewinnt. Diese Tatsache kann von der Anwendung verwendet werden, um eine Sitzung aus einem Pool zuzuordnen, ohne den externen Zustand der Zuordnung zu speichern.
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_API_PTR
JET_ERR
JetResetSessionContext
JET_SESID
JetStopService