Condividi tramite


Funzione MsiOpenDatabaseA (msiquery.h)

La funzione MsiOpenDatabase apre un file di database per l'accesso ai dati. Questa funzione restituisce un handle che deve essere chiuso usando MsiCloseHandle.

Sintassi

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

Parametri

[in] szDatabasePath

Specifica il percorso completo o il percorso relativo del file di database.

[in] szPersist

Riceve il percorso completo del file o la modalità di persistenza. È possibile usare il parametro szPersist per indirizzare l'output permanente a un nuovo file o per specificare una delle modalità di persistenza predefinite seguenti.

Valore Significato
MSIDBOPEN_CREATEDIRECT
Creare un nuovo database, modalità diretta di lettura/scrittura.
MSIDBOPEN_CREATE
Creare un nuovo database, modalità transact di lettura/scrittura.
MSIDBOPEN_DIRECT
Aprire un database in lettura/scrittura diretta senza transazione.
MSIDBOPEN_READONLY
Aprire un database di sola lettura, senza modifiche persistenti.
MSIDBOPEN_TRANSACT
Aprire un database di lettura/scrittura in modalità transazione.
MSIDBOPEN_PATCHFILE
Aggiungere questo flag per indicare un file di patch.

[out] phDatabase

Puntatore alla posizione dell'handle di database restituito.

Valore restituito

La funzione MsiOpenDatabase restituisce i valori seguenti:

Commenti

Per apportare e salvare le modifiche apportate a un database, aprire prima di tutto il database nella modalità transazione (MSIDBOPEN_TRANSACT), creare (MSIDBOPEN_CREATE o MSIDBOPEN_CREATEDIRECT) o direct (MSIDBOPEN_DIRECT). Dopo aver apportato le modifiche, chiamare sempre MsiDatabaseCommit prima di chiudere l'handle del database. MsiDatabaseCommit scarica tutti i buffer.

Chiamare sempre MsiDatabaseCommit in un database aperto in modalità diretta (MSIDBOPEN_DIRECT o MSIDBOPEN_CREATEDIRECT) prima di chiudere l'handle del database. In caso contrario, il database potrebbe danneggiare il database.

Poiché MsiOpenDatabase avvia l'accesso al database, non può essere usato con un'installazione in esecuzione.

Si noti che è consigliabile usare variabili di tipo PMSIHANDLE perché il programma di installazione chiude gli oggetti PMSIHANDLE quando escono dall'ambito, mentre è necessario chiudere gli oggetti MSIHANDLE chiamando MsiCloseHandle. Per altre informazioni, vedere Usare PMSIHANDLE anziché la sezione HANDLE in Procedure consigliate per Windows Installer.

Nota Quando un database viene aperto come output di un altro database, il flusso di informazioni di riepilogo del database di output è in realtà un mirror di sola lettura del database originale e pertanto non può essere modificato. Inoltre, non è persistente con il database. Per creare o modificare le informazioni di riepilogo per il database di output, è necessario chiuderla e riaprirla.
 
Se la funzione ha esito negativo, è possibile ottenere informazioni estese sull'errore usando MsiGetLastErrorRecord.

Nota

L'intestazione msiquery.h definisce MsiOpenDatabase come alias che seleziona automaticamente la versione ANSI o Unicode di questa funzione in base alla definizione della costante del preprocessore UNICODE. La combinazione dell'utilizzo dell'alias indipendente dalla codifica con il codice che non è indipendente dalla codifica può causare mancate corrispondenze che generano errori di compilazione o di runtime. Per altre informazioni, vedere Convenzioni per i prototipi di funzioni.

Requisiti

Requisito Valore
Client minimo supportato Windows Installer 5.0 in Windows Server 2012, Windows 8, Windows Server 2008 R2 o Windows 7. Windows Installer 4.0 o Windows Installer 4.5 in Windows Server 2008 o Windows Vista. Windows Installer in Windows Server 2003 o Windows XP
Piattaforma di destinazione Windows
Intestazione msiquery.h
Libreria Msi.lib
DLL Msi.dll

Vedi anche

Esempio di database e patch

Funzioni generali di accesso al database