JetAttachDatabase-Funktion

Gilt für: Windows | Windows Server

JetAttachDatabase-Funktion

Die JetAttachDatabase-Funktion angefügt eine Datenbankdatei zur Verwendung mit einer Datenbankinstanz. Um die Datenbank verwenden zu können, muss sie anschließend mit JetOpenDatabase geöffnet werden.

    JET_ERR JET_API JetAttachDatabase(
      __in          JET_SESID sesid,
      __in          const tchar* szFilename,
      __in          JET_GRBIT grbit
    );

Parameter

sesid

Der Datenbanksitzungskontext, der für den API-Aufruf verwendet werden soll.

szFilename

Der Name der zu anfügenden Datenbank.

grbit

Eine Gruppe von Bits, die null oder mehr der folgenden Optionen angeben.

Wert

Bedeutung

JET_bitDbDeleteCorruptIndexes

Wenn JET_paramEnableIndexChecking festgelegt wurde, werden alle Indizes für Unicode-Daten gelöscht. Weitere Details finden Sie im Abschnitt „Anmerkungen“.

JET_bitDbDeleteUnicodeIndexes

Alle Indizes über Unicode-Daten werden gelöscht, unabhängig von der Einstellung JET_paramEnableIndexChecking. Weitere Details finden Sie im Abschnitt „Anmerkungen“.

JET_bitDbUpgrade

Veraltet. Darf nicht verwendet werden.

JET_bitDbReadOnly

Verhindert Änderungen an der Datenbank.

Rückgabewert

Diese Funktion gibt den JET_ERR datentyp mit einem der folgenden Rückgabecodes zurück. Weitere Informationen zu den möglichen ESE-Fehlern finden Sie unter Extensible Storage Engine Errors and Error Handling Parameters.

Rückgabecode

Beschreibung

JET_errSuccess

Der Vorgang wurde erfolgreich abgeschlossen.

JET_errBackupInProgress

Das Anfügen einer Datenbank ist während einer Sicherung nicht zulässig.

JET_errDatabaseFileReadOnly

Die durch szFilename angegebene Datenbankdatei muss beschreibbar sein. Das Read-Only-Attribut darf nicht festgelegt werden, und der ausgeführte Prozess muss über ausreichende Berechtigungen zum Schreiben in die Datei verfügen.

JET_errDatabaseInUse

Die Datenbankdatei wurde bereits von einem anderen Prozess geöffnet.

JET_errDatabaseInvalidPath

In szFilename wurde ein ungültiger Pfad angegeben. szFilename muss nicht NULL sein und auf einen gültigen Pfad verweisen.

JET_errDatabaseSharingViolation

Die Datenbankdatei wurde bereits von einer anderen Sitzung angefügt.

JET_errFileAccessDenied

Die Datenbank-Engine kann die Datenbankdatei nicht öffnen. Die Datei wird möglicherweise von einem anderen Prozess verwendet, oder der Aufrufer hat möglicherweise nicht genügend Berechtigungen, um die Datei zu öffnen.

JET_errFileNotFound

Die in szFilename gegebene Datei ist nicht vorhanden.

JET_errPrimaryIndexCorrupted

Fehler beim primären Index. Dies kann auf eine physische Beschädigung (z. B. Datenträger- oder Speicherbeschädigung) führen. Sie kann auch zurückgegeben werden, wenn eine Datenbank angefügt wird, die zuletzt unter einem älteren Betriebssystem geändert wurde, und der primäre Index sich über einer Spalte mit Unicode-Daten befindet. Weitere Informationen zu Indizes für Unicode-Daten finden Sie in den Anmerkungen.

JET_errSecondaryIndexCorrupted

Bei einem sekundären Index tritt ein Fehler auf. Dies kann auf eine physische Beschädigung (z. B. Datenträger- oder Speicherbeschädigung) führen. Sie kann auch zurückgegeben werden, wenn eine Datenbank angefügt wird, die zuletzt unter einem älteren Betriebssystem geändert wurde, und ein sekundärer Index sich über einer Spalte mit Unicode-Daten befindet. Weitere Informationen zu Indizes für Unicode-Daten finden Sie in den Anmerkungen. Sekundäre Indizes werden vollständig neu erstellt, wenn eine Datenbank mit einem Offline-Hilfsprogramm mithilfe des folgenden Befehls defragmentiert wird: esentutl -d.

JET_errTooManyAttachedDatabases

Pro Instanz kann nur eine begrenzte Anzahl von Datenbanken angefügt werden. Der Grenzwert liegt derzeit bei sieben Datenbanken pro Instanz.

JET_wrnDatabaseAttached

Eine nichtfatale Warnung, die angibt, dass die Datenbankdatei bereits von dieser Sitzung angefügt wurde.

Hinweise

Das Aufrufen von JetAttachDatabase entspricht dem Aufrufen von JetAttachDatabase2 und dem Übergeben eines Werts von 0 (null), d. h. es gibt keine Beschränkung für den parameter cpgDatabaseSizeMax.

Durch Anfügen einer beschreibbaren Datenbank (d. h. wenn JET_bitDbReadOnly im grbit-Parameter nicht angegeben wurde) wird die Datei ausschließlich auf Betriebssystemebene geöffnet. Die Datei kann von keinem anderen Prozess geöffnet werden. Es ist möglich, dass mehrere Prozesse eine einzelne Datenbank anfügen, indem sie im schreibgeschützten Modus geöffnet werden.

Die Datenbankdatei wird mit JetDetachDatabase oder JetDetachDatabase2 getrennt.

Parameter für die Indexüberprüfung

Verschiedene Versionen von Windows Unicode-Text auf unterschiedliche Weise normalisieren. Das bedeutet, dass Indizes, die unter einer Windows erstellt wurden, möglicherweise nicht in anderen Versionen funktionieren.

Vor Windows Server 2003, als die Betriebssystemversion geändert wurde (einschließlich der Installation eines Service Packs), war jeder Index über Unicode-Daten in einem potenziell beschädigten Zustand.

Indizes, die in Windows Server 2003 und höher erstellt wurden, werden mit der Version der Unicode-Normalisierung gekennzeichnet, mit der sie erstellt wurden. Ältere Indizes enthalten keine Versionsinformationen. Die meisten Unicode-Normalisierungsänderungen bestehen aus dem Hinzufügen neuer Zeichen. Codepunkte, die zuvor nicht definiert waren, werden jetzt definiert und normalisieren sich anders. Wenn Binärdaten also in einer Unicode-Spalte gespeichert werden, normalisieren sie sich anders, wenn neue Codepunkte definiert werden.

Ab Windows Server 2003 verfolgt die ESE-Datenbank-Engine Unicode-Indexeinträge nach, die nicht definierte Codepunkte enthalten. Diese können verwendet werden, um einen Index zu korrigieren, wenn sich der Satz definierter Unicode-Zeichen ändert.

Diese Parameter steuern, was geschieht, wenn die ESE-Datenbank-Engine an eine Datenbank angefügt wird, die zuletzt unter einem anderen Build des Betriebssystems verwendet wurde. Die Betriebssystemversion wird im Datenbankheader gestempelt.

Wenn JET_paramEnableIndexChecking auf TRUE festgelegt ist und die Datenbank potenziell beschädigte Indizes enthält:

  • JetAttachDatabase löscht die potenziell beschädigten Indizes, wenn grbit JET_bitDbDeleteCorruptIndexes

  • JetAttachDatabase gibt einen Fehler zurück, wenn grbit keine JET_bitDbDeleteCorruptIndexes enthält und Indizes gelöscht werden müssen.

Wenn JET_paramEnableIndexChecking auf FALSE festgelegt ist:

  • JetAttachDatabase ignoriert potenziell beschädigte Indizes und gibt JET_errSuccess zurück (vorausgesetzt, es sind keine anderen Fehler aufgetreten).

Windows Server 2003 und höher: Wenn JET_paramEnableIndexChecking nicht zurückgesetzt wurde, wird die interne Fixuptabelle verwendet, um Indexeinträge zu korrigieren. Dadurch werden möglicherweise nicht alle Indexbeschädigungen behoben, dies ist jedoch für die Anwendung transparent.

Wenn die Datenbank als schreibgeschützt angefügt wurde, kann der Index nicht fixiert oder gelöscht werden. In diesem Fall gibt die API stattdessen einen Fehler zurück, z. B. JET_errSecondaryIndexCorrupted oder JET_errPrimaryIndexCorrupted.

Anforderungen

| | |

Client

|

Erfordert Windows Vista, Windows XP oder Windows 2000 Professional.

| |

Server

|

Erfordert Windows Server 2008, Windows Server 2003 oder Windows 2000 Server.

| |

Header

|

Wird in Esent.h deklariert.

| |

Bibliothek

|

Verwenden Sie ESENT.lib.

| |

DLL

|

Erfordert ESENT.dll.

| |

Unicode

|

Wird als JetAddColumnW (Unicode) und JetAddColumnA (ANSI) implementiert.

|

Weitere Informationen

Erweiterbare Storage-Engine-Dateien
JET_ERR
JET_GRBIT
JET_SESID
JET_TABLEID
JetAttachDatabase2
JetCreateDatabase
JetDetachDatabase
JetDetachDatabase2
JetOpenDatabase
JetSetSystemParameter