JetCommitTransaction 函数

适用于:Windows |Windows服务器

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 错误的详细信息,请参阅可扩展存储引擎错误错误处理参数

返回代码

说明

JET_errSuccess

操作已成功完成。

JET_errClientRequestToStopJetService

无法完成该操作,因为由于调用 JetStopService 而停止了与会话关联的实例上的所有活动。

JET_errInstanceUnavailable

无法完成该操作,因为与会话关联的实例遇到了一个致命错误,该错误要求撤销对所有数据的访问以保护该数据的完整性。

此错误仅由 Windows XP 和更高版本返回。

JET_errInvalidgrbit

所请求的选项之一无效或未实现。 当以下情况时,JetCommitTransaction 将返回此错误:

  • 指定了非法 Grbit

  • JET_bitWaitLastLevel0Commit与另一 个 grbit 结合使用指定。

  • JET_bitWaitAllLevel0Commit与另一 个 grbit 结合使用指定。

JET_errNotInitialized

无法完成该操作,因为尚未初始化与会话关联的实例。

JET_errNotInTransaction

操作失败,因为给定会话不在事务中。

JET_errRestoreInProgress

无法完成该操作,因为还原操作正在与会话关联的实例上进行。

JET_errSessionSharingViolation

同一会话不能同时用于多个线程。

此错误仅由 Windows XP 和更高版本返回。

JET_errTermInProgress

无法完成该操作,因为与会话关联的实例正在关闭。

成功后,将在给定会话的当前保存点期间对数据库进行任何更改,并将结束保存点。 如果会话的最后一个保存点已结束,则事务将选择性地刷新到事务日志文件,会话将退出事务。

失败时,会话的事务状态将保持不变。 不会更改数据库状态。 应用程序应调用 JetRollback 以中止事务。

备注

必须对 JetCommitTransactionJetRollback 进行一次调用,才能匹配给定会话对 JetBeginTransaction 的每个调用。

要求

要求

客户端

需要Windows Vista、Windows XP 或 Windows 2000 Professional。

Server

需要Windows Server 2008、Windows Server 2003 或 Windows 2000 Server。

标头

在 Esent.h 中声明。

Library

使用 ESENT.lib。

DLL

需要ESENT.dll。

另请参阅

JET_ERR
JET_GRBIT
JET_SESID
JetBeginTransaction
JetCommitTransaction
JetRollback
JetStopService