JetAttachDatabase-Funktion
Gilt für: Windows | Windows Server
JetAttachDatabase-Funktion
Die JetAttachDatabase-Funktion fügt eine Datenbankdatei zur Verwendung mit einer Datenbank instance an. 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 anzufü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 über 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 von 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 Datentyp JET_ERR mit einem der folgenden Rückgabecodes zurück. Weitere Informationen zu möglichen ESE-Fehlern finden Sie unter Erweiterbare Speichermodulfehler und Fehlerbehandlungsparameter.
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 schreibbar sein. Das attribut Read-Only 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 ungleich 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 verfügt möglicherweise nicht über ausreichende Berechtigungen zum Öffnen der Datei. |
JET_errFileNotFound |
Die in szFilename angegebene Datei ist nicht vorhanden. |
JET_errPrimaryIndexCorrupted |
Es liegt ein Fehler mit dem primären Index vor. Dies kann auf physische Beschädigungen (z. B. Datenträger- oder Speicherbeschädigung) hindeuten. Es kann auch zurückgegeben werden, wenn eine Datenbank, die zuletzt geändert wurde, an ein älteres Betriebssystem angefügt wird, und der primäre Index befindet sich über einer Spalte mit Unicode-Daten. Weitere Informationen zu Indizes für Unicode-Daten finden Sie in den Hinweisen. |
JET_errSecondaryIndexCorrupted |
Bei einem sekundären Index tritt ein Fehler auf. Dies kann auf physische Beschädigungen (z. B. Datenträger- oder Speicherbeschädigung) hindeuten. Es kann auch zurückgegeben werden, wenn eine Datenbank, die zuletzt geändert wurde, an ein älteres Betriebssystem angefügt wird, und ein sekundärer Index befindet sich über einer Spalte mit Unicode-Daten. Weitere Informationen zu Indizes für Unicode-Daten finden Sie in den Hinweisen. Sekundäre Indizes werden vollständig neu erstellt, wenn eine Datenbank mit einem Offline-Hilfsprogramm mit dem folgenden Befehl defragmentiert wird: esentutl -d. |
JET_errTooManyAttachedDatabases |
Pro instance kann nur eine begrenzte Anzahl von Datenbanken angefügt werden. Der Grenzwert beträgt derzeit sieben Datenbanken pro instance. |
JET_wrnDatabaseAttached |
Eine nicht schwerwiegende Warnung, die angibt, dass die Datenbankdatei bereits von dieser Sitzung angefügt wurde. |
Bemerkungen
Das Aufrufen von JetAttachDatabase entspricht dem Aufrufen von JetAttachDatabase2 und dem Übergeben des Werts 0 (d. h. es gibt keine Beschränkung) für den Parameter cpgDatabaseSizeMax .
Durch das Anfügen einer beschreibbaren Datenbank (d. h. wenn JET_bitDbReadOnly nicht im grbit-Parameter angegeben wurde) wird die Datei ausschließlich auf Betriebssystemebene geöffnet. Kein anderer Prozess kann die Datei öffnen. Es ist möglich, dass mehrere Prozesse eine einzelne Datenbank anfügen, indem sie im schreibgeschützten Modus geöffnet werden.
Die Datenbankdatei wird mithilfe von JetDetachDatabase oder JetDetachDatabase2 getrennt.
Indexüberprüfungsparameter
Verschiedene Versionen von Windows normalisieren Unicode-Text auf unterschiedliche Weise. Das bedeutet, dass Indizes, die unter einer Windows-Version erstellt wurden, unter anderen Versionen möglicherweise nicht funktionieren.
Vor Windows Server 2003, als die Betriebssystemversion geändert wurde (einschließlich der Installation eines Service Packs), befand sich jeder Index über Unicode-Daten in einem potenziell beschädigten Zustand.
In Windows Server 2003 und höher erstellte Indizes 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 normalisiert sich anders. Wenn binäre Daten 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 von definierten Unicode-Zeichen ändert.
Diese Parameter steuern, was geschieht, wenn die ESE-Datenbank-Engine an eine Datenbank anfügt, 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
JetAttachDatabasegibt einen Fehler zurück, wenn grbit keine JET_bitDbDeleteCorruptIndexes enthält und Indizes vorhanden sind, die gelöscht werden müssen.
Wenn JET_paramEnableIndexChecking auf FALSE festgelegt ist:
- JetAttachDatabase ignoriert potenziell beschädigte Indizes und gibt JET_errSuccess zurück (sofern keine anderen Fehler aufgetreten sind).
Windows Server 2003 und höher: Wenn JET_paramEnableIndexChecking nicht zurückgesetzt wurde, wird die interne Fixuptabelle verwendet, um Indexeinträge zu korrigieren. Dies kann nicht alle Indexbeschädigungen beheben, ist aber für die Anwendung transparent.
Wenn die Datenbank schreibgeschützt angefügt wurde, kann der Index nicht korrigiert oder gelöscht werden. In diesem Fall gibt die API stattdessen einen Fehler zurück, z. B. JET_errSecondaryIndexCorrupted oder JET_errPrimaryIndexCorrupted.
Anforderungen
Anforderung | Wert |
---|---|
Client |
Erfordert Windows Vista, Windows XP oder Windows 2000 Professional. |
Server |
Erfordert Windows Server 2008, Windows Server 2003 oder Windows 2000 Server. |
Kopfzeile |
Deklariert in Esent.h. |
Bibliothek |
Verwenden Sie ESENT.lib. |
DLL |
Erfordert ESENT.dll. |
Unicode |
Implementiert als JetAddColumnW (Unicode) und JetAddColumnA (ANSI). |
Weitere Informationen
Erweiterbare Speichermoduldateien
JET_ERR
JET_GRBIT
JET_SESID
JET_TABLEID
JetAttachDatabase2
JetCreateDatabase
JetDetachDatabase
JetDetachDatabase2
JetOpenDatabase
JetSetSystemParameter