What does HRESULT 0xC80003F9 (hrRecordDeleted) mean?

 
Previous Next
hrTooManyKeys hrReadVerifyFailure

hrRecordDeleted

Locate the failure in the Jet call chain

hrRecordDeleted means the cursor refers to a row that was deleted after it became the current record.

This is the legacy Directory Service backup/restore HRESULT form of JET_errRecordDeleted (0xC80003F9).

The key comparison is: hrRecordNotFound is a failed key lookup; this result describes a row that existed in the cursor lifecycle. The first useful observation is to capture transaction boundaries, cursor position, bookmark, and the session that performed the delete. This evidence distinguishes failed lookup, lost cursor currency, deleted rows, invalid bookmarks, and prepared-update state.

The ESE objects in play

Diagnostic layercursor currency, bookmarks, prepared updates, and row lifecycle
Typical API surfaceJetMove, JetSeek, JetGetBookmark, JetGotoBookmark, JetPrepareUpdate, JetUpdate, and JetDelete
Code-specific conditionthe cursor refers to a row that was deleted after it became the current record
First corrective directionreseek from a stable key or bookmark and make deletion an expected concurrency outcome

Preparing an update creates cursor state that must be completed or cancelled deliberately. Cursor currency can be invalidated by navigation, deletion, rollback, or concurrent changes.

Questions the logs must answer

  • prepared-update mode, row version, transaction, and concurrent writer; associate it with this result rather than with a later generic exception.
  • the current index, seek relation, key, range, and preceding navigation result; associate it with this result rather than with a later generic exception.
  • bookmark bytes and the table/database context that produced them.

Response and verification

  1. Freeze the failing request context and record 0xC80003F9, the Jet API name, and the current instance/session ownership.
  2. Apply the targeted fix: reseek from a stable key or bookmark and make deletion an expected concurrency outcome.
  3. Before retrying the operation, reconcile cursor currency, row existence, bookmark validity, and prepared-update cleanup.

Distinguishing signals

hrRecordClusteredChangedan update attempted to change a clustered key in a way the engine cannot apply in place
hrRecordNotFounda seek or lookup found no row matching the constructed key or bookmark criteria
hrNoCurrentRecordthe cursor is before-first, after-last, on a deleted row, or otherwise not positioned on a record

Actions that can hide or worsen the problem

  • Do not reuse bookmarks after restore, rebuild, or incompatible schema change.
  • Do not retry a write without rereading the row and its business preconditions.

Technical references


Looking for a different code? Search another status or error code.