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 ,則會刪除 Unicode 資料的所有索引。 如需詳細資訊,請參閱<備註>一節。 |
JET_bitDbDeleteUnicodeIndexes |
不論 JET_paramEnableIndexChecking的設定為何,都會刪除所有 Unicode 資料的索引。 如需詳細資訊,請參閱<備註>一節。 |
JET_bitDbUpgrade |
已過時。 請勿使用。 |
JET_bitDbReadOnly |
防止修改資料庫。 |
傳回值
此函式會傳回具有下列其中一個傳回碼 的JET_ERR 資料類型。 如需可能 ESE 錯誤的詳細資訊,請參閱 可延伸的儲存引擎錯誤 和 錯誤處理參數。
傳回碼 |
Description |
---|---|
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 |
主要索引發生錯誤。 這可能是來自實體損毀 (,例如磁片或記憶體損毀) 。 附加舊版作業系統上上次修改的資料庫,而且主索引位於具有 Unicode 資料的資料行上時,也可能傳回它。 如需 Unicode 資料索引的詳細資訊,請參閱備註。 |
JET_errSecondaryIndexCorrupted |
次要索引發生錯誤。 這可能是來自實體損毀 (,例如磁片或記憶體損毀) 。 附加舊版作業系統上上次修改的資料庫時,也會傳回它,而次要索引則位於具有 Unicode 資料的資料行上。 如需 Unicode 資料索引的詳細資訊,請參閱備註。 使用下列命令以離線公用程式重組資料庫時,會完全重建次要索引: esentutl -d。 |
JET_errTooManyAttachedDatabases |
每個實例只能附加有限數目的資料庫。 此限制目前為每個實例有七個資料庫。 |
JET_wrnDatabaseAttached |
指出此會話已經附加資料庫檔案的非嚴重警告。 |
備註
呼叫 JetAttachDatabase 相當於呼叫 JetAttachDatabase2 並傳遞零的值,這表示 cpgDatabaseSizeMax 參數沒有限制。
附加可寫入的資料庫 (,也就是說,如果未在 grbit 參數中指定JET_bitDbReadOnly,) 將會在作業系統層級以獨佔方式開啟檔案。 沒有其他進程可以開啟檔案。 多個進程可以在唯讀模式中開啟單一資料庫來附加單一資料庫。
使用 JetDetachDatabase 或 JetDetachDatabase2卸離資料庫檔案。
索引檢查參數
不同版本的 Windows 會以不同方式將 Unicode 文字正規化。 這表示在一個版本的 Windows 下建置的索引可能無法在其他版本上運作。
在 Windows Server 2003 之前,當作業系統版本變更 (包括 Service Pack) 安裝時,Unicode 資料上的每個索引都處於可能損毀的狀態。
在 Windows Server 2003 和更新版本中建立的索引會以建置的 Unicode 正規化版本標示。 舊版索引不包含版本資訊。 大部分 Unicode 正規化變更都包含新增字元、先前未定義的字碼點現在已定義,並以不同的方式正規化。 因此,如果二進位資料儲存在 Unicode 資料行中,它會在定義新的代碼點時以不同的方式正規化。
從 Windows Server 2003 開始,ESE 資料庫引擎會追蹤包含未定義代碼點的 Unicode 索引項目目。 當已定義的 Unicode 字元集變更時,這些字元可用來修正索引。
這些參數可控制當 ESE 資料庫引擎附加至上次在不同的作業系統組建下使用的資料庫時,會發生什麼事。 作業系統版本會在資料庫標頭中戳記。
如果 JET_paramEnableIndexChecking 設定為 TRUE,且資料庫包含可能損毀的索引:
如果grbit包含JET_bitDbDeleteCorruptIndexes,JetAttachDatabase將會刪除可能損毀的索引
如果grbit不包含JET_bitDbDeleteCorruptIndexes,而且有需要刪除的索引,JetAttachDatabase將會傳回錯誤。
如果 JET_paramEnableIndexChecking 設定為 FALSE:
- JetAttachDatabase 會忽略可能損毀的索引,並傳回JET_errSuccess (假設沒有其他錯誤) 。
Windows Server 2003 和更新版本:如果 JET_paramEnableIndexChecking 尚未重設,則會使用內部修正表來修正索引項目目。 這可能不會修正所有索引損毀,但對應用程式而言是透明的。
如果資料庫已附加為唯讀,則無法修正或刪除索引。 在此情況下,API 會改為傳回錯誤,例如JET_errSecondaryIndexCorrupted或JET_errPrimaryIndexCorrupted。
規格需求
需求 | 值 |
---|---|
用戶端 |
需要 Windows Vista、Windows XP 或 Windows 2000 Professional。 |
Server |
需要 Windows Server 2008、Windows Server 2003 或 Windows 2000 Server。 |
標頭 |
在 Esent.h 中宣告。 |
程式庫 |
使用 ESENT.lib。 |
Dll |
需要ESENT.dll。 |
Unicode |
實作為 JetAddColumnW (Unicode) 和 JetAddColumnA (ANSI) 。 |
另請參閱
可延伸儲存引擎檔案
JET_ERR
JET_GRBIT
JET_SESID
JET_TABLEID
JetAttachDatabase2
JetCreateDatabase
JetDetachDatabase
JetDetachDatabase2
JetOpenDatabase
JetSetSystemParameter