共用方式為


JetGetLock 函式

適用于: Windows |Windows Server

JetGetLock 函式

JetGetLock函式提供方法來明確保留更新資料列、寫入鎖定或明確防止任何其他會話更新資料列、讀取鎖定的能力。 一般而言,由於更新資料列,會隱含取得資料列寫入鎖定。 讀取鎖定通常不需要,因為記錄版本設定。 不過,在某些情況下,交易可能會想要明確鎖定資料列以強制執行序列化,或確保後續作業會藉由採取必要的鎖定來成功。

JET_ERR JET_API JetGetLock(
  __in          JET_SESID sesid,
  __in          JET_TABLEID tableid,
  __in          JET_GRBIT grbit
);

參數

sesid

將用於此呼叫的會話。

tableid

將用於這個呼叫的資料指標。

grbit

一組位,其中包含要用於此呼叫的選項,其中包含下列零或多個:

意義

JET_bitReadLock

此旗標會導致在目前記錄上取得讀取鎖定。 讀取鎖定與其他會話已持有的寫入鎖定不相容,但與其他會話所持有的讀取鎖定相容。

JET_bitWriteLock

此旗標會導致在目前記錄上取得寫入鎖定。 寫入鎖定與其他會話所持有的寫入或讀取鎖定不相容,但與相同會話所持有的讀取鎖定相容。

傳回值

此函式會傳回具有下列其中一個傳回碼 的 JET_ERR 資料類型。 如需可能 ESE 錯誤的詳細資訊,請參閱 可延伸儲存引擎錯誤錯誤處理參數

傳回碼

描述

JET_errSuccess

作業已成功完成。

JET_errClientRequestToStopJetService

無法完成作業,因為與會話相關聯之實例上的所有活動因 JetStopService呼叫而停止。

JET_errInstanceUnavailable

無法完成作業,因為與會話相關聯的實例發生嚴重錯誤,需要撤銷所有資料的存取權,以保護該資料的完整性。 此錯誤只會由 Windows XP 和更新版本傳回。

JET_errInvalidgrbit

指定的 grbit 不是JET_bitReadLock或JET_bitWriteLock。 它必須是這兩個旗標的其中一個。

JET_errNoCurrentRecord

資料指標必須位於記錄上,才能取得鎖定。 鎖定一律會在記錄上。

JET_errNotInitialized

無法完成作業,因為與會話相關聯的實例尚未初始化。

JET_errNotInTransaction

鎖定只能由交易中的會話取得。

JET_errPermissionDenied

資料指標不能是唯讀的,而且會取得寫入鎖定。

JET_errRestoreInProgress

無法完成作業,因為與會話相關聯的實例上正在進行還原作業。

JET_errSessionSharingViolation

同一個會話不能同時用於一個以上的執行緒。 此錯誤只會由 Windows XP 和更新版本傳回。

JET_errTermInProgress

無法完成作業,因為與會話相關聯的實例正在關閉。

JET_errTransReadOnly

會話必須具有寫入權限,才能取得寫入鎖定。

JET_errWriteConflict

要求衝突鎖定時傳回的錯誤。

成功時,會話已取得要求的鎖定。

失敗時,會話尚未取得要求的鎖定。

備註

寫入鎖定無法使用具有唯讀許可權的會話或資料指標取得,即使會話和資料指標最終不會執行更新作業也一樣。 會話和資料指標都必須具有寫入權限,才能取得寫入鎖定。

讀取和寫入鎖定是封閉式鎖定的方法。 封閉式鎖定預期多個並行會話衝突,並事先取得鎖定,以確保其作業成功。

大部分的作業都會透過隱含取得的鎖定來序列化。 不過,某些作業不會。 為了說明這一點,請考慮這兩筆交易:

T1 :R (A) 、U (B)

T2 :R (B) 、U (A)

記錄層級版本控制可確保同時執行時,每個交易都會看到 A 和 B 的原始值。在結果相依于讀取的資料的情況下,沒有可能會產生相同 A 和 B 結果的序列順序。 為了讓應用程式將此交易序列化,它應該在讀取值時,在每個交易中取得 A 和 B 的明確讀取鎖定。

規格需求

需求

用戶端

需要 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_ERR
JET_SESID
JET_TABLEID
JetPrepareUpdate
JetStopService
JetUpdate