將 ASP.NET 應用從 32 位元 Windows Server 2003 (IIS 6) 遷移至 64 位元 Windows Server 2008/2012/2016/2019 (IIS 7+) 時,連接 Access .mdb 資料庫報錯:
「未在本機電腦上註冊 'microsoft.jet.oledb.4.0' 提供者。」
原因:**Jet OLEDB 4.0 無 64 位元版本**,64 位元進程無法載入 32 位元 COM 元件。解決方案:**改用 Microsoft ACE OLEDB 12.0/16.0 (支援 64 位元) 驅動程式**,並修改連接字串。
string connStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Server.MapPath("App_Data/db.mdb");
string connStr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + Server.MapPath("App_Data/db.mdb");
只需將 Provider 從 Microsoft.Jet.OLEDB.4.0 改為 Microsoft.ACE.OLEDB.12.0**,其餘參數保持不變。
伺服器必須安裝對應位元的 ACE 驅動:
| 版本 | 下載 | 支援格式 |
|---|---|---|
| ACE 12.0 (2010) | AccessDatabaseEngine_X64.exe | .mdb, .accdb, .xls, .xlsx |
| ACE 16.0 (2016) | AccessDatabaseEngine_X64.exe | .mdb, .accdb, .xls, .xlsx, .csv |
安裝注意: 若系統已安裝 32 位元 Office/ACE,**無法直接安裝 64 位元版** (會報錯)。解決:移除所有 32 位元 Office/ACE 元件,或**啟用應用程式池「啟用 32 位元應用程式 = True」並繼續用 Jet 4.0** (見下文替代方案)。
Provider=Microsoft.Jet.OLEDB.4.0 即可正常運作優點: 零代碼修改、無需安裝 ACE 64 位、相容舊版 Jet。
缺點: 32 位元進程虛擬記憶體限制 4GB、效能較 64 位元略低、無法使用 64 位元原生元件。
test_access.aspx,輸出連接測試結果。w3wp.exe → 平台 (32 位元 / 64 位元)。| 現象 | 原因 | 解決 |
|---|---|---|
| 安裝 ACE 64 位報錯「已安裝 32 位元 Office」 | 同機器不支援混裝 32/64 位 Office 元件 | 移除 32 位 Office/ACE、或改用應用程式池 32 位模式 |
| 連接字串改 ACE 仍報錯 | ACE 未安裝、或安裝版本不匹配 (12.0 vs 16.0) | 確認安裝 reg query HKLM\SOFTWARE\Microsoft\Office\12.0\Access Connectivity Engine |
| 網路路徑 (UNC) 連接失敗 | Jet/ACE 不支援 UNC 路徑直接開啟 | 複製到本機、或用映射磁碟機代號 |
| 並發寫入鎖定/損壞 | Access 非伺服器級資料庫,不適合高並發寫入 | 遷移至 SQL Server / SQLite / PostgreSQL |
64 位元 IIS 連 Access,**核心矛盾在於 Jet 4.0 無 64 位版本**。標準解法:**安裝 ACE 12.0/16.0 64 位 + 修改 Provider 字串**;快速相容法:**應用程式池啟用 32 位模式 + 維持 Jet 4.0**。長遠規劃:**遷移至 SQL Server / PostgreSQL / SQLite** 等正規資料庫引擎,徹底擺脫 Access 限制。