JetCommitTransaction 函式
適用于: Windows |Windows Server
JetCommitTransaction 函式
JetCommitTransaction函式會在目前儲存點期間認可對資料庫狀態所做的變更,並將其移轉至先前的儲存點。 如果認可最外層的儲存點,則在該儲存點期間所做的變更將會認可至資料庫的狀態,而會話將會結束交易。
JET_ERR JET_API JetCommitTransaction(
__in JET_SESID sesid,
__in JET_GRBIT grbit
);
參數
sesid
要用於這個呼叫的會話。
grbit
指定下列零個或多個選項的位群組。
值 |
意義 |
---|---|
JET_bitCommitLazyFlush |
交易通常會認可,但此 API 不會等待交易排清至交易記錄檔,然後再返回呼叫端。 這可大幅減少認可作業的持續時間,但代價是持久性。 在下次呼叫 JetInit期間,當機復原期間,系統會自動中止未排清至記錄檔的任何交易。 如果指定了JET_bitWaitLastLevel0Commit或JET_bitWaitAllLevel0Commit,則會忽略此選項。 如果此對 JetCommitTransaction 的呼叫不符合此會話的第一次呼叫 JetBeginTransaction ,則會忽略此選項。 這是因為在最外層儲存點上發生的最終動作是判斷整個交易是否實際認可至磁片的判斷因素。 |
JET_bitWaitAllLevel0Commit |
任何尚未排清交易記錄檔的會話先前認可的所有交易都會立即排清。 此 API 會等到交易已排清,再返回呼叫端。 即使會話目前不在交易中,也可以使用此選項。 此選項不能與任何其他選項搭配使用。 此選項僅適用于 Windows Server 2003。 |
JET_bitWaitLastLevel0Commit |
如果會話先前已認可任何交易,而且尚未排清到交易記錄檔,則應該立即排清。 此 API 會等到交易已排清,再返回呼叫端。 如果應用程式先前已使用 JET_bitCommitLazyFlush 認可數筆交易,而且現在想要將所有交易排清到磁片,這非常有用。 即使會話目前不在交易中,也可以使用此選項。 此選項不能與任何其他選項搭配使用。 |
傳回值
此函式會傳回具有下列其中一個傳回碼 的JET_ERR 資料類型。 如需可能 ESE 錯誤的詳細資訊,請參閱 可延伸的儲存引擎錯誤 和 錯誤處理參數。
傳回碼 |
Description |
---|---|
JET_errSuccess |
作業已成功完成。 |
JET_errClientRequestToStopJetService |
因為與會話相關聯的實例上的所有活動因為對 JetStopService的呼叫而停止,所以無法完成作業。 |
JET_errInstanceUnavailable |
無法完成作業,因為與會話相關聯的實例發生嚴重錯誤,要求撤銷所有資料的存取權以保護該資料的完整性。 此錯誤只會由 Windows XP 和更新版本傳回。 |
JET_errInvalidgrbit |
要求的其中一個選項無效或未實作。 當下列情況時, JetCommitTransaction 會傳回此錯誤:
|
JET_errNotInitialized |
無法完成作業,因為與會話相關聯的實例尚未初始化。 |
JET_errNotInTransaction |
作業失敗,因為指定的會話不在交易中。 |
JET_errRestoreInProgress |
因為與會話相關聯的實例上正在進行還原作業,所以無法完成作業。 |
JET_errSessionSharingViolation |
同一個會話不能同時用於多個執行緒。 此錯誤只會由 Windows XP 和更新版本傳回。 |
JET_errTermInProgress |
因為與會話相關聯的實例正在關閉,所以無法完成作業。 |
成功時,將會認可在指定會話的目前儲存點期間對資料庫所做的任何變更,且將會結束儲存點。 如果會話的最後一個儲存點已結束,則交易會選擇性地排清至交易記錄檔,而會話將會結束交易。
失敗時,會話的交易狀態會保持不變。 不會變更資料庫狀態。 應用程式應該呼叫 JetRollback 來中止交易。
備註
必須對 JetCommitTransaction 或 JetRollback 進行一次呼叫,才能比對指定會話的每個 JetBeginTransaction 呼叫。
規格需求
需求 | 值 |
---|---|
用戶端 |
需要 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_GRBIT
JET_SESID
JetBeginTransaction
JetCommitTransaction
JetRollback
JetStopService