JetUpdate 函数

适用于:Windows |Windows服务器

JetUpdate 函数

JetUpdate 函数执行更新操作,包括将新行插入表或更新现有行。 通过调用 JetDelete 来执行删除表行。

JetUpdate 是执行插入或更新的最后一步。 更新首先调用 JetPrepareUpdate,然后通过调用 JetSetColumn 或 JetSetColumns 一次或多次来设置记录状态。 最后,调用 JetUpdate 以完成更新操作。 索引仅由 JetUpdateJetUpdate2 更新,而不是在 JetSetColumn 或 JetSetColumns 期间更新。

    JET_ERR JET_API JetUpdate(
      __in          JET_SESID sesid,
      __in          JET_TABLEID tableid,
      __out_opt     void* pvBookmark,
      __in          unsigned long cbBookmark,
      __out_opt     unsigned long* pcbActual
    );

参数

sesid

用于此调用的会话。

tableid

要用于此调用的游标。

pvBookmark

指向插入行的返回书签的指针。

cbBookmark

pvBookmark 指向的缓冲区的大小。

缪尔文

在 pvBookmark 中返回的插入行的书签的返回大小。

返回值

此函数使用以下返回代码之一返回 JET_ERR 数据类型。 有关可能的 ESE 错误的详细信息,请参阅可扩展存储引擎错误错误处理参数

返回代码

说明

JET_errSuccess

操作已成功完成。

JET_errBufferTooSmall

记录书签的给定缓冲区不够大,无法存储记录书签。

JET_errClientRequestToStopJetService

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

JET_errColumnIllegalNull

与JET_errNullInvalid相同。

JET_errDiskFull

更新操作需要数据库文件增长或日志文件分配,但数据库文件或日志系列所在的磁盘驱动器已满。 或者,数据库文件位于 FAT32 格式化卷上,数据库文件已为 4GBytes,这是 FAT32 的每个文件限制。

JET_errInstanceUnavailable

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

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

JET_errInvalidParameter

JetPrepareUpdate 函数中的给定准备参数不是有效的标志。

JET_errKeyDuplicate

此记录的索引键是表中已有的另一条记录的另一个索引键的副本,索引不允许重复。

JET_errKeyTruncated

插入或更新的记录具有一个或多个索引,生成的键将超过允许的最大大小。 因此,操作未能阻止密钥截断。

JET_errMultiValuedIndexViolation

插入或更新的记录具有索引的多值列,其两个或多个值在为索引设置的最大长度键大小内相同。 因此,该记录在索引中具有相同的两个条目,无效。

JET_errNotInitialized

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

JET_errNullInvalid

要插入的记录中的一个或多个列或要替换的记录的更新状态为 NULL ,这违反了这些列的定义约束。

JET_errNullKeyDisallowed

定义了一个或多个索引,不允许 NULL 键,所替换的记录的插入或更新状态违反了此定义的约束。

JET_errRecordPrimaryChanged

记录替换操作已更新主键。 必须通过删除现有记录并插入具有所需数据的新记录来完成对主键列的更新。

JET_errRestoreInProgress

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

JET_errSessionSharingViolation

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

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

JET_errTermInProgress

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

JET_errTransReadOnly

在只读事务的范围内尝试更新是非法的。 只读事务是已使用对 JetBeginTransaction2 和 JET_bitTransactionReadOnly 的调用开始的事务。

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

JET_errUpdateNotPrepared

JetPrepareUpdate 使用JET_prepCancel调用,但光标未处于准备状态。

JET_errVersionStoreOutOfMemory

操作失败,因为没有足够的内存来保留有关更新的事务信息。

JET_errWriteConflict

另一个会话之前已锁定要更新的记录。 此会话尝试的更新将失败。

成功后,游标上的打开更新操作已完成。 如果为表定义了自动递增列,则为插入的记录设置此值。 如果为表定义了版本列,则为新插入的记录初始化其值,或在每次替换记录时递增。 将更新所有索引,包括聚集索引和非聚集索引。

失败时,不会对数据库进行任何更改。 在插入之前和替换回调函数之前可能已调用,但在插入后和替换回调之后不会调用,因为后者不能导致更新失败。 游标复制缓冲区处于准备状态,以便有机会以增量方式更正导致错误的问题,然后重试更新操作。

备注

回调函数可以注册为在插入之前或之后调用,在更新之前或更新之后调用。

JetSetColumn 强制实施记录大小限制,而不是 JetUpdate 强制实施。

请务必了解在单个事务中执行大量更新操作的影响。 对数据库的每个更新都必须由版本存储中的数据库引擎跟踪。 版本存储包含数据库中所有不同版本的记录或索引条目的实时记录,该记录可由所有活动事务查看。 这些版本用于支持数据库引擎使用的多版本控制的并发控制,以支持使用快照隔离的事务。 一旦数据库引擎耗尽了用于存储这些版本的资源,那么在完成某些事务以允许回收这些资源之前,它再也不能接受进一步的更改。 当引擎处于此状态时,所有更新都将失败,JET_errVersionStoreOutOfMemory。 可以使用具有JET_paramMaxVerPagesJET_paramGlobalMinVerPagesJetSetSystemParameter 来控制数据库引擎可用于存储这些版本的资源。

要求

要求

客户端

需要 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_SESID
JET_TABLEID
JetDelete
JetPrepareUpdate
JetRegisterCallback
JetRetrieveColumn
JetRetrieveColumns
JetSetColumn
JetSetColumns
JetSetSystemParameter
系统参数