Функция JetAttachDatabase

Применимо к: Windows | Windows Server

Функция JetAttachDatabase

Функция JetAttachDatabase присоединяет файл базы данных для использования с экземпляром базы данных. Чтобы использовать базу данных, ее необходимо будет открыть с помощью JetOpenDatabase.

    JET_ERR JET_API JetAttachDatabase(
      __in          JET_SESID sesid,
      __in          const tchar* szFilename,
      __in          JET_GRBIT grbit
    );

Параметры

sesid

Контекст сеанса базы данных, используемый для вызова API.

szFilename

Имя присоединяемой базы данных.

grbit

Группа битов, задающая ноль или более следующих параметров.

Значение

Значение

JET_bitDbDeleteCorruptIndexes

Если задано JET_paramEnableIndexChecking , все индексы по данным Юникода будут удалены. Дополнительные сведения см. в разделе "Примечания".

JET_bitDbDeleteUnicodeIndexes

Все индексы данных Юникода будут удалены независимо от настройки JET_paramEnableIndexChecking. Дополнительные сведения см. в разделе "Примечания".

JET_bitDbUpgrade

Является устаревшей. Не используйте.

JET_bitDbReadOnly

Предотвращает внесение изменений в базу данных.

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

Эта функция возвращает тип данных JET_ERR с одним из следующих кодов возврата. Дополнительные сведения о возможных ошибках ESE см. в разделах Ошибки подсистемы расширяемого хранилища и Параметры обработки ошибок.

Код возврата

Описание

JET_errSuccess

Операция выполнена успешно.

JET_errBackupInProgress

Подключение базы данных во время резервного копирования запрещено.

JET_errDatabaseFileReadOnly

Файл базы данных, указанный параметром szFilename , должен быть доступный для записи. Атрибут Read-Only не должен быть задан, а выполняящийся процесс должен иметь достаточные привилегии для записи в файл.

JET_errDatabaseInUse

Файл базы данных уже открыт другим процессом.

JET_errDatabaseInvalidPath

В szFilename указан недопустимый путь. Значение szFilename должно быть не равно NULL и ссылаться на допустимый путь.

JET_errDatabaseSharingViolation

Файл базы данных уже присоединен другим сеансом.

JET_errFileAccessDenied

Ядро СУБД не может открыть файл базы данных. Файл может использоваться другим процессом или вызывающий объект может не иметь достаточных привилегий для открытия файла.

JET_errFileNotFound

Файл, указанный в szFilename , не существует.

JET_errPrimaryIndexCorrupted

Произошла ошибка с основным индексом. Это может быть физическое повреждение (например, повреждение диска или памяти). Он также может быть возвращен при присоединении базы данных, измененной в последнее время в старой операционной системе, а основной индекс находится по столбцу с данными Юникода. Дополнительные сведения об индексах по данным Юникода см. в примечаниях.

JET_errSecondaryIndexCorrupted

Возникает ошибка со вторичным индексом. Это может быть физическое повреждение (например, повреждение диска или памяти). Он также может быть возвращен при присоединении базы данных, измененной в более старой операционной системе, а вторичный индекс находится над столбцом с данными Юникода. Дополнительные сведения об индексах по данным Юникода см. в примечаниях. Вторичные индексы полностью перестраиваются при дефрагментации базы данных с помощью автономной программы с помощью следующей команды: esentutl -d.

JET_errTooManyAttachedDatabases

Для каждого экземпляра может быть присоединено только ограниченное количество баз данных. В настоящее время это ограничение составляет семь баз данных на экземпляр.

JET_wrnDatabaseAttached

Некритичное предупреждение, указывающее, что файл базы данных уже присоединен к этому сеансу.

Комментарии

Вызов JetAttachDatabase эквивалентен вызову JetAttachDatabase2 и передаче значения нуля, то есть нет ограничений для параметра cpgDatabaseSizeMax .

Присоединение доступной для записи базы данных (т. е. если JET_bitDbReadOnly не было указано в параметре grbit ), откроет файл исключительно на уровне операционной системы. Другой процесс не сможет открыть файл. Несколько процессов могут подключить одну базу данных, открыв ее в режиме только для чтения.

Файл базы данных отсоединяется с помощью JetDetachDatabase или JetDetachDatabase2.

Параметры проверки индекса

В разных версиях Windows текст Юникода нормализуется по-разному. Это означает, что индексы, созданные в одной версии Windows, могут не работать в других версиях.

До Windows Server 2003, когда версия операционной системы изменялась (включая установку пакета обновления), каждый индекс данных Юникода находился в потенциально поврежденном состоянии.

Индексы, созданные в Windows Server 2003 и более поздних версиях, помечаются версией нормализации Юникода, с помощью которой они были созданы. Старые индексы не содержат сведений о версии. Большинство изменений нормализации Юникода состоят в добавлении новых символов, кодовые точки, которые ранее не были определены, теперь определяются и нормализуются по-разному. Таким образом, если двоичные данные хранятся в столбце Юникода, они нормализуются по-разному при определении новых кодовых точек.

В Windows Server 2003 ядро СУБД ESE отслеживает записи индекса Юникода, содержащие неопределенные кодовые точки. Их можно использовать для исправления индекса при изменении набора определенных символов Юникода.

Эти параметры определяют, что происходит при подключении ядра СУБД ESE к базе данных, которая в последний раз использовалась в другой сборке операционной системы. Версия операционной системы помечена в заголовке базы данных.

Если JET_paramEnableIndexChecking имеет значение TRUE, а база данных содержит потенциально поврежденные индексы:

  • JetAttachDatabase удалит потенциально поврежденные индексы, если grbit содержит JET_bitDbDeleteCorruptIndexes

  • JetAttachDatabaseвозвращает ошибку, если grbit не содержит JET_bitDbDeleteCorruptIndexes и есть индексы, требующие удаления.

Если JET_paramEnableIndexChecking имеет значение FALSE:

  • JetAttachDatabase игнорирует потенциально поврежденные индексы и возвращает JET_errSuccess (при условии, что других ошибок не было).

Windows Server 2003 и более поздних версий: если JET_paramEnableIndexChecking не был сброшен, внутренняя таблица исправлений будет использоваться для исправления записей индекса. Это может не исправить все повреждения индекса, но будет прозрачным для приложения.

Если база данных подключена как доступная только для чтения, индекс нельзя исправить или удалить. В этом случае API возвращает ошибку, например JET_errSecondaryIndexCorrupted или JET_errPrimaryIndexCorrupted.

Требования

Требование Значение

Клиент

Требуется Windows Vista, Windows XP или Windows 2000 Professional.

Сервер

Требуется Windows Server 2008, Windows Server 2003 или Windows 2000 Server.

Верхняя часть

Объявлено в Esent.h.

Библиотека

Используйте ESENT.lib.

DLL

Требуется ESENT.dll.

Юникод

Реализовано как JetAddColumnW (Юникод) и JetAddColumnA (ANSI).

См. также:

Расширяемые файлы подсистемы хранилища
JET_ERR
JET_GRBIT
JET_SESID
JET_TABLEID
JetAttachDatabase2
JetCreateDatabase
JetDetachDatabase
JetDetachDatabase2
JetOpenDatabase
JetSetSystemParameter