Freigeben über


MsiOpenDatabaseA-Funktion (msiquery.h)

Die MsiOpenDatabase-Funktion öffnet eine Datenbankdatei für den Datenzugriff. Diese Funktion gibt ein Handle zurück, das mit MsiCloseHandle geschlossen werden soll.

Syntax

UINT MsiOpenDatabaseA(
  [in]  LPCSTR    szDatabasePath,
  [in]  LPCSTR    szPersist,
  [out] MSIHANDLE *phDatabase
);

Parameter

[in] szDatabasePath

Gibt den vollständigen Oder relativen Pfad zur Datenbankdatei an.

[in] szPersist

Empfängt den vollständigen Pfad zur Datei oder zum Persistenzmodus. Sie können den szPersist-Parameter verwenden, um die persistente Ausgabe an eine neue Datei zu leiten oder einen der folgenden vordefinierten Persistenzmodi anzugeben.

Wert Bedeutung
MSIDBOPEN_CREATEDIRECT
Erstellen Sie eine neue Datenbank im direkten Modus lese-/schreibmodus.
MSIDBOPEN_CREATE
Erstellen Sie eine neue Datenbank im Transact-Modus lese-/schreibmodus.
MSIDBOPEN_DIRECT
Öffnen Sie eine Datenbank mit direktem Lese-/Schreibzugriff ohne Transaktion.
MSIDBOPEN_READONLY
Öffnen Sie eine datenbank schreibgeschützt, ohne dauerhafte Änderungen.
MSIDBOPEN_TRANSACT
Öffnen Sie eine Datenbank mit Lese-/Schreibzugriff im Transaktionsmodus.
MSIDBOPEN_PATCHFILE
Fügen Sie dieses Flag hinzu, um eine Patchdatei anzugeben.

[out] phDatabase

Zeiger auf den Speicherort des zurückgegebenen Datenbankhandles.

Rückgabewert

Die MsiOpenDatabase-Funktion gibt die folgenden Werte zurück:

Hinweise

Um Änderungen an einer Datenbank vorzunehmen und zu speichern, öffnen Sie zuerst die Datenbank im Transaktionsmodus (MSIDBOPEN_TRANSACT), erstellen (MSIDBOPEN_CREATE oder MSIDBOPEN_CREATEDIRECT) oder im direkten Modus (MSIDBOPEN_DIRECT). Nachdem Sie die Änderungen vorgenommen haben, rufen Sie immer MsiDatabaseCommit auf, bevor Sie das Datenbankhandle schließen. MsiDatabaseCommit löscht alle Puffer.

Rufen Sie immer MsiDatabaseCommit für eine Datenbank auf, die im direkten Modus (MSIDBOPEN_DIRECT oder MSIDBOPEN_CREATEDIRECT) geöffnet wurde, bevor Sie das Handle der Datenbank schließen. Andernfalls kann die Datenbank beschädigt werden.

Da MsiOpenDatabase den Datenbankzugriff initiiert, kann er nicht mit einer ausgeführten Installation verwendet werden.

Beachten Sie, dass es empfohlen wird, Variablen des Typs PMSIHANDLE zu verwenden, da das Installationsprogramm PMSIHANDLE-Objekte schließt, wenn sie aus dem Bereich gehen, während Sie MSIHANDLE-Objekte schließen müssen, indem Sie MsiCloseHandle aufrufen. Weitere Informationen finden Sie im Abschnitt Verwenden von PMSIHANDLE anstelle von HANDLE im Abschnitt Bewährte Methoden für Windows Installer.

Hinweis Wenn eine Datenbank als Ausgabe einer anderen Datenbank geöffnet wird, ist der Zusammenfassungsinformationsstream der Ausgabedatenbank tatsächlich ein schreibgeschützter Spiegel der ursprünglichen Datenbank und kann daher nicht geändert werden. Darüber hinaus wird sie nicht in der Datenbank beibehalten. Um die Zusammenfassungsinformationen für die Ausgabedatenbank zu erstellen oder zu ändern, muss sie geschlossen und erneut geöffnet werden.
 
Wenn die Funktion fehlschlägt, können Sie erweiterte Fehlerinformationen mithilfe von MsiGetLastErrorRecord abrufen.

Hinweis

Der msiquery.h-Header definiert MsiOpenDatabase als Alias, der automatisch die ANSI- oder Unicode-Version dieser Funktion basierend auf der Definition der UNICODE-Präprozessorkonstante auswählt. Das Mischen der Verwendung des codierungsneutralen Alias mit nicht codierungsneutralem Code kann zu Nichtübereinstimmungen führen, die zu Kompilierungs- oder Laufzeitfehlern führen. Weitere Informationen finden Sie unter Konventionen für Funktionsprototypen.

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Windows Installer 5.0 unter Windows Server 2012, Windows 8, Windows Server 2008 R2 oder Windows 7. Windows Installer 4.0 oder Windows Installer 4.5 unter Windows Server 2008 oder Windows Vista. Windows Installer unter Windows Server 2003 oder Windows XP
Zielplattform Windows
Kopfzeile msiquery.h
Bibliothek Msi.lib
DLL Msi.dll

Weitere Informationen

Datenbank- und Patchbeispiel

Allgemeine Datenbankzugriffsfunktionen