共用方式為


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,) 將會在作業系統層級以獨佔方式開啟檔案。 沒有其他進程可以開啟檔案。 多個進程可以在唯讀模式中開啟單一資料庫來附加單一資料庫。

使用 JetDetachDatabaseJetDetachDatabase2卸離資料庫檔案。

索引檢查參數

不同版本的 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