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

返回代码

说明

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。

服务器

需要 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