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


Функция 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
Создайте новую базу данных в режиме чтения и записи транзакций.
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. Дополнительные сведения см. в разделе Использование PMSIHANDLE вместо HANDLE статьи Рекомендации по установщику Windows.

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

Примечание

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

Требования

Требование Значение
Минимальная версия клиента Установщик 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
Целевая платформа Windows
Header msiquery.h
Библиотека Msi.lib
DLL Msi.dll

См. также раздел

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

Общие функции доступа к базе данных