Share via


MsiOpenDatabaseW-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 MsiOpenDatabaseW(
  [in]  LPCWSTR   szDatabasePath,
  [in]  LPCWSTR   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 mit Lese-/Schreibzugriff im direkten Modus.
MSIDBOPEN_CREATE
Erstellen Sie eine neue Datenbank mit Lese-/Schreibzugriff im Transact-Modus.
MSIDBOPEN_DIRECT
Öffnen Sie eine Datenbank mit direktem Lese-/Schreibzugriff ohne Transaktion.
MSIDBOPEN_READONLY
Öffnen Sie eine datenbank schreibgeschützt, ohne persistente Ä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 die Datenbank zunächst 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 leert alle Puffer.

Rufen Sie msiDatabaseCommit immer 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 die Verwendung von Variablen vom Typ PMSIHANDLE empfohlen wird, da das Installationsprogramm PMSIHANDLE-Objekte schließt, wenn sie den Gültigkeitsbereich sprengen, während Sie MSIHANDLE-Objekte durch Aufrufen von MsiCloseHandle schließen müssen. 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 Zusammenfassungsinformationsdatenstrom 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 die ANSI- oder Unicode-Version dieser Funktion basierend auf der Definition der UNICODE-Präprozessorkonstante automatisch auswählt. Das Mischen der Verwendung des codierungsneutralen Alias mit Code, der nicht Codierungsneutral ist, 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