JetSetSessionCoNtext 函式
適用于: Windows |Windows Server
JetSetSessionCoNtext 函式
JetSetSessionCoNtext函式會使用指定的內容控制碼,將會話與目前線程產生關聯。 此關聯會覆寫指定會話的交易必須完全發生在相同執行緒上的預設引擎需求。
JET_ERR JET_API JetSetSessionContext(
__in JET_SESID sesid,
__in JET_API_PTR ulContext
);
參數
sesid
要用於這個呼叫的會話。
ulCoNtext
這個會話將與其相關聯的唯一識別碼。
傳回值
此函式會傳回具有下列其中一個傳回碼 的 JET_ERR 資料類型。 如需可能 ESE 錯誤的詳細資訊,請參閱 可延伸儲存引擎錯誤 和 錯誤處理參數。
傳回碼 |
Description |
---|---|
JET_errSuccess |
作業已成功完成。 |
JET_errClientRequestToStopJetService |
作業無法完成,因為與會話相關聯的實例上的所有活動都因為 對 JetStopService的呼叫而停止。 |
JET_errInstanceUnavailable |
作業無法完成,因為與會話相關聯的實例發生嚴重錯誤,需要撤銷所有資料的存取權,以保護該資料的完整性。 Windowsxp: 這個傳回值是在 Windows XP 中引進。 |
JET_errInvalidParameter |
提供的其中一個參數包含非預期的值,或數個參數值的組合會產生非預期的結果。 JetSetSessionCoNtext會在下列情況下傳回此錯誤:
|
JET_errNotInitialized |
作業無法完成,因為與會話相關聯的實例尚未初始化。 |
JET_errRestoreInProgress |
作業無法完成,因為與會話相關聯的實例上正在進行還原作業。 |
JET_errSessionCoNtextAlreadySet |
會話無法與目前的執行緒相關聯,因為它已經與執行緒相關聯。 |
JET_errTermInProgress |
作業無法完成,因為與會話相關聯的實例正在關閉。 |
如果此函式成功,會話將會與目前的執行緒相關聯。 不會變更資料庫狀態。
如果此函式失敗,會話狀態會保持不變。 不會變更資料庫狀態。
備註
會話通常會在交易期間系結至特定執行緒。 此行為的設計目的是協助應用程式偵測並防止在多個執行緒之間共用單一會話的概念上不正確。 有時候,這個簡單的檢查不適用於應用程式的架構。 例如,如果應用程式使用執行緒集區裝載伺服器端物件,而交易會跨越指定物件的多個伺服器呼叫,則即使使用模式正確,此保護可能會造成某些呼叫失敗,而JET_errSessionSharingViolation。 COM 物件伺服器很常見這種情況。
JetSetSessionCoNtext 和 JetResetSessionCoNtext 可藉由讓此會話共用檢查更有彈性地解決此問題。 當應用程式使用特定會話開始進行一系列的 ESE API 呼叫時,它會先將會話內容設定為指定的值。 此動作會將會話與呼叫執行緒產生關聯。 在指定的範例中,此內容可以是包含 JET 會話控制碼的物件位址。 一旦進行 ESE API 呼叫,應用程式就會重設會話內容。 此動作會解除會話與呼叫執行緒的關聯。 即使會話有作用中的交易,物件及其會話也可以由另一個執行緒使用。
請務必注意,必須在開啟該會話的交易之前呼叫 JetSetSessionCoNtext ,否則關聯將無法運作。
JetSetSessionCoNtext 是安全線程。 多個執行緒可以嘗試同時在同一個會話上設定執行緒內容,而且只有一個會獲勝。 應用程式可以使用這個事實作為從集區配置會話的方法,而不需儲存其配置的外部狀態。
規格需求
需求 | 值 |
---|---|
用戶端 |
需要 Windows Vista、Windows XP 或 Windows 2000 Professional。 |
Server |
需要 Windows Server 2008、Windows Server 2003 或 Windows 2000 Server。 |
標頭 |
在 Esent.h 中宣告。 |
程式庫 |
使用 ESENT.lib。 |
Dll |
需要ESENT.dll。 |
另請參閱
JET_API_PTR
JET_ERR
JetResetSessionCoNtext
JET_SESID
JetStopService