Поделиться через


Функция MsiOpenDatabaseA (msiquery.h)

Функция msiOpenDatabase открывает файл базы данных для доступа к данным. Эта функция возвращает дескриптор, который должен быть закрыт с помощью MsiCloseHandle.

Синтаксис

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

Параметры

[in] szDatabasePath

Указывает полный путь или относительный путь к файлу базы данных.

[in] szPersist

Получает полный путь к файлу или режиму сохраняемости. Можно использовать параметр szPersist для направления постоянных выходных данных в новый файл или указания одного из следующих предопределенных режимов сохраняемости.

Ценность Значение
MSIDBOPEN_CREATEDIRECT
Создайте новую базу данных, прямой режим чтения и записи.
MSIDBOPEN_CREATE
Создайте новую базу данных, режим transact read/write.
MSIDBOPEN_DIRECT
Откройте базу данных прямое чтение и запись без транзакции.
MSIDBOPEN_READONLY
Откройте базу данных только для чтения, не изменяя постоянные изменения.
MSIDBOPEN_TRANSACT
Откройте базу данных для чтения и записи в режиме транзакций.
MSIDBOPEN_PATCHFILE
Добавьте этот флаг, чтобы указать файл исправления.

[out] phDatabase

Указатель на расположение возвращаемого дескриптора базы данных.

Возвращаемое значение

Функция MsiOpenDatabase возвращает следующие значения:

Замечания

Чтобы внести и сохранить изменения в базе данных, сначала откройте базу данных в транзакции (MSIDBOPEN_TRANSACT), создайте (MSIDBOPEN_CREATE или MSIDBOPEN_CREATEDIRECT) или прямой (MSIDBOPEN_DIRECT) режим. После внесения изменений всегда вызывайте MsiDatabaseCommit перед закрытием дескриптора базы данных. MsiDatabaseCommit очищает все буферы.

Всегда вызывайте MsiDatabaseCommit в базе данных, которая была открыта в прямом режиме (MSIDBOPEN_DIRECT или MSIDBOPEN_CREATEDIRECT) перед закрытием дескриптора базы данных. Это может привести к повреждению базы данных.

Так как MsiOpenDatabase инициирует доступ к базе данных, ее нельзя использовать с запущенной установкой.

Обратите внимание, что рекомендуется использовать переменные типа PMSIHANDLE, так как установщик закрывает объекты PMSIHANDLE по мере их выхода из области, в то время как необходимо закрыть объекты MSIHANDLE, вызвав MsiCloseHandle. Дополнительные сведения см. в разделе Use PMSIHANDLE вместо HANDLE в разделе Рекомендации по установщику Windows.

Примечание. Если база данных открыта в качестве выходных данных другой базы данных, поток сводной информации выходной базы данных фактически является зеркальным отображением исходной базы данных только для чтения и, таким образом, невозможно изменить. Кроме того, он не сохраняется в базе данных. Чтобы создать или изменить сводную информацию для выходной базы данных, ее необходимо закрыть и повторно открыть.
 
Если функция завершается ошибкой, можно получить расширенные сведения об ошибке с помощью MsiGetLastErrorRecord.

Заметка

Заголовок msiquery.h определяет MsiOpenDatabase как псевдоним, который автоматически выбирает версию ANSI или Юникод этой функции на основе определения константы препроцессора ЮНИКОДа. Сочетание использования псевдонима, нейтрального для кодирования, с кодом, не зависящим от кодирования, может привести к несоответствиям, которые приводят к ошибкам компиляции или среды выполнения. Дополнительные сведения см. в соглашениях о прототипах функций.

Требования

Требование Ценность
минимальные поддерживаемые клиентские Установщик Windows 5.0 в Windows Server 2012, Windows 8, Windows Server 2008 R2 или Windows 7. Установщик Windows 4.0 или установщик Windows 4.5 в Windows Server 2008 или Windows Vista. Установщик Windows в Windows Server 2003 или Windows XP
целевая платформа Виндоус
заголовка msiquery.h
библиотеки Msi.lib
DLL Msi.dll

См. также

пример базы данных и исправлений

Функции общего доступа к базам данных