| Previous | Next |
| hrInvalidParameter | hrOutOfMemory |
hrInvalidDatabaseId
Locate the failure in the Jet call chain
For hrInvalidDatabaseId, read this result as a boundary in the ESE state machine, not as a generic Windows failure. The decisive boundary is the JET_DBID no longer identifies an open database in the supplied session.
This result is the legacy Directory Service backup/restore HRESULT form of the ESE condition normally written as JET_errInvalidDatabaseId. Preserve the original value 0xC80003F2 when a wrapper also exposes a signed JET_ERR.
The key comparison for this HRESULT is this: hrDatabaseNotFound is a name/path lookup failure; this result is a stale or foreign handle problem. The first useful observation is to trace where the database ID was returned, closed, detached, or crossed a session boundary. This it evidence separates file identity, attachment, open-handle ownership, lock state, and structural validity.
The ESE objects in play
| Diagnostic layer | database file, attachment state, JET_DBID ownership, and database lifecycle |
|---|---|
| Typical API surface | JetCreateDatabase, JetAttachDatabase, JetOpenDatabase, JetCloseDatabase, and JetDetachDatabase |
| Code-specific boundary | the JET_DBID no longer identifies an open database in the supplied session |
| First corrective direction | reopen the database through the owning session and invalidate cached IDs when close or detach succeeds |
Creating an empty file is not a valid substitute for a missing or corrupted ESE database., attachment is an instance relationship; opening a database returns a session-scoped database ID.
Questions the logs must answer
A useful trace for this HRESULT should preserve the first failing operation and the state of the database file, attachment state, JET_DBID ownership, and database lifecycle.
- Code-specific observation: trace where the database ID was returned, closed, detached, or crossed a session boundary.
- open tables, transactions, maintenance, and recovery activity using the database; associate it with this result rather than with a later generic exception.
- the canonical database path and file identity; associate it with it rather than with a later generic exception.
- the instance attachment list plus every session-scoped JET_DBID; associate it with it rather than with a later generic exception.
Log lengths, hashes, IDs, flags, and redacted samples where appropriate.
Response and verification
- Freeze the failing request context and record it,
0xC80003F2, the Jet API name, and the current instance/session ownership. - Verify the code-specific precondition: trace where the database ID was returned, closed, detached, or crossed a session boundary.
- Apply the narrow correction: reopen the database through the owning session and invalidate cached IDs when close or detach succeeds.
- Before retrying it, reconcile attachment, open/closed state, file identity, and database header status.
- add a regression test that forces the old boundary and proves cleanup leaves no stale handles; then repeat the smallest read-only or disposable test that exercises the corrected precondition.
Developer-facing acceptance test
Build a focused test that reproduces it at the database file, attachment state, JET_DBID ownership, and database lifecycle layer. Record the precondition, execute one API call, and assert the HRESULT plus the resulting handle and transaction state. The corrected it test should change only the decisive condition—the JET_DBID no longer identifies an open database in the supplied session—and should prove that cleanup is safe if the call still fails.
Distinguishing signals
For this HRESULT, hrDatabaseNotFound is a name/path lookup failure; it is a stale or foreign handle problem. The following neighboring results belong to the same broad subsystem but mark different boundaries:
hrInvalidDatabase | the selected file is not a usable ESE database for this operation |
|---|---|
hrDatabaseCorrupted | the database cannot be trusted as a coherent ESE file or is unavailable in a way reported as corruption |
hrDatabaseNotFound | a valid database name or path did not resolve to an attached or existing database |
Keep it in the incident record; replacing it with “database error” hides whether the next step is handle renewal, schema correction, lock reconciliation, or file preservation.
Actions that can hide or worsen the problem
- do not create an empty database at the expected path as a substitute for the missing or damaged artifact.
- do not force detach or delete while owners and recovery state are unknown.
Technical references
- JetCreateDatabase — used to verify the ESE object model, API ordering, or error family relevant to it.
- JetDetachDatabase
- ESE files
- JET error codes
- Microsoft: JET_ERR enumeration
Looking for a different code? Search another status or error code.
