Функция 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