Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學
您现在的位置: Windows教程網 >> Windows教程 >  >> 電腦軟體教學 >> 伺服器技術 >> 關於伺服器

解決 Microsoft OLE DB Provider for ODBC Drivers 80004005/80040e21 錯誤

編輯:關於伺服器

經典 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' 操作必須使用一個可更新的查詢

核心成因:NTFS 權限不足

IIS 匿名帳號 IUSR_機器名 (或應用程式集區身分) 對關鍵目錄缺乏寫入權限:

  • 資料庫檔案目錄 (.mdb) 無寫入權限 → 無法更新/寫入資料,拋出「可更新的查詢」錯誤。
  • 系統暫存目錄 %windir%\temp\ 無寫入權限 → JET 引擎建立暫存檔失敗,拋出「Unable to open registry key / Temporary Jet DSN」錯誤。常因系統清理工具改變權限導致。

解決方案

1. 授予資料庫目錄寫入權限

  1. 資源管理器 → 工具 → 資料夾選項 → 檢視 → 取消「使用簡單檔案共享」。
  2. .mdb 所在目錄右鍵 → 內容 → 安全性 → 新增 → 進階 → 立即尋找 → 選 IUSR_機器名 (IIS 6) 或 NETWORK SERVICE (IIS 7+) → 勾選「寫入」/「修改」。

2. 授予系統暫存目錄權限 (關鍵)

目錄:%windir%\temp\ (通常 C:\Windows\Temp)
帳號:IUSR_機器名 / NETWORK SERVICE / IIS_IUSRS
權限:讀取/寫入/修改

⚠ 避免使用優化/清理工具隨意修改系統目錄權限。

3. 重新註冊腳本引擎 (輔助排查)

regsvr32 jscript.dll
regsvr32 vbscript.dll
iisreset

錯誤 80040e21 專項分析

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) 徹底杜絕注入與格式問題。

Copyright © Windows教程網 All Rights Reserved