經典 ASP + Access (MDB) 應用在 Windows Server 2003 + IIS 6 + NTFS 環境常見的資料庫連線錯誤代碼 80004005、80040e21 完整成因分析與解決方案。
Microsoft JET Database Engine 錯誤 '80004005' 未指定的錯誤
[Microsoft][ODBC Microsoft Access Driver] General error Unable to open registry key 'Temporary (volatile) Jet DSN...'
Microsoft OLE DB Provider for ODBC Drivers 錯誤 '80004005'
Provider 錯誤 '80004005' 未指定的錯誤
Microsoft JET Database Engine 錯誤 '80004005' 操作必須使用一個可更新的查詢
IIS 匿名帳號 IUSR_機器名 (或應用程式集區身分) 對關鍵目錄缺乏寫入權限:
%windir%\temp\ 無寫入權限 → JET 引擎建立暫存檔失敗,拋出「Unable to open registry key / Temporary Jet DSN」錯誤。常因系統清理工具改變權限導致。IUSR_機器名 (IIS 6) 或 NETWORK SERVICE (IIS 7+) → 勾選「寫入」/「修改」。目錄:%windir%\temp\ (通常 C:\Windows\Temp)
帳號:IUSR_機器名 / NETWORK SERVICE / IIS_IUSRS
權限:讀取/寫入/修改
⚠ 避免使用優化/清理工具隨意修改系統目錄權限。
regsvr32 jscript.dll
regsvr32 vbscript.dll
iisreset
Microsoft OLE DB Provider for ODBC Drivers 錯誤 '80040e21'
多步 OLE DB 作業產生錯誤... 沒有工作被完成
常見觸發場景: 執行「更新記錄」/「插入記錄」伺服器行為時。
| 原因 | 說明 | 解決 |
|---|---|---|
| 嘗試寫入自動編號欄位 | Access AutoNumber 由系統自動填充,不可手動指定值 | 移除 INSERT/UPDATE 中的自動編號欄位 |
| 資料型別不匹配 | 日期寫入布林欄位、字串寫入數值欄位、日期格式錯誤 | 前端驗證 + 參數化查詢 + 格式化 (如 Format(date, "yyyy/mm/dd")) |
| 欄位長度超限 | 輸入字串超過定義長度 (如 Text 255) | 前端截斷/驗證,資料庫調整長度 |
| Oracle ODBC 格式問題 | 日期/數字格式不符 Oracle 預期 | 使用 TO_DATE/TO_NUMBER 或參數綁定 |
結語:90% ASP+Access 權限錯誤源於 IUSR/NETWORK SERVICE 對 .mdb 目錄 與 %windir%\temp 缺乏寫入權限。80040e21 則多為資料型別/格式/自動編號邏輯錯誤。建議遷移至參數化查詢 (ADODB.Command) 徹底杜絕注入與格式問題。