1. 程式人生 > >未在本地計算機上註冊“Microsoft.Jet.OLEDB.4.0”提供程式

未在本地計算機上註冊“Microsoft.Jet.OLEDB.4.0”提供程式

前言

今天在做專案的時候遇到了一個難題“未在本地計算機上註冊“Microsoft.Jet.OLEDB.4.0”提供程式”,如圖:

這裡寫圖片描述

方案一

現在的Win7系統中安裝的一般都是32位的Office,因為微軟推薦使用32位的Office,相容性更強,穩定性更好。在使用Access作為資料庫的時候,C#操作Access,如果Access是accdb,那麼一切會很順利,Win7系統中有訪問accdb的相應的元件,使用C#呼叫就可以。如果是mdb,以往在XP上是使用Jet方式訪問,而在Win7上已經不推薦使用Jet, 因為Win7系統本身就不帶Jet的元件。從而出現了一個替代品Microsoft Access Engine,通過ACE的方式訪問Access

資料庫,只要安裝了這個,一切就OK.

但是安裝的時候會出現問題。你從微軟的主頁下載,會發現有兩個版本,一個是位32位系統準備的,另一個是為64位系統準備的。因為我們是Win7 64位系統,而且專案用到的dll都是64位的,所以要裝Microsoft Access Engine-x64,但是安裝的時候會檢測到你機器上安裝的是32位的Office,要求你把Office升級到64位,難道真的要大費周章的解除安裝並重裝Office嗎?解決方案還是有的。

  • 使用”/passive“命令來安裝,例如”C:\directory path\AccessDatabaseEngine_x64.exe” /passive

  • 安裝完成後,檢視登錄檔

  • HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\14.0\Common\FilesPaths,刪除mso.dll

    問題就會解決,就可以使用C# ACE來訪問Access資料庫。注意,第二步不能少,否則會出現Office Config配置問題,已啟動Office就會重新安裝Office.

方案二

  • 檢查連結字串書寫是否正確,>”Provider=Microsoft.Jet.Oledb.4.0;Data Source=資料庫路徑”

  • 註冊元件regsvr32 msjetoledb40.dll 問題依然存在。

  • 重新安裝MDAC28.exe

    ,無奈問題還存在。

網上關於這個錯誤的解決辦法一般就以上三種,那我的問題出現在哪裡呢?會不會是許可權問題?

  • 開啟登錄檔(開始選單–》執行–》regedit),搜尋“Microsoft.Jet.Oledb.4.0”,檢視許可權,發現未給iis_wpg讀取許可權。

於是給“Microsoft.Jet.Oledb.4.0”項加上Everyone讀取許可權。
我想它對com元件應該是比較瞭解的,我後採用重灌mdac.inf並註冊元件可以搞定這個問題,在上傳資源中附上mdac的安裝檔案,以備日後使用。

方案三

  • 設定應用程式池預設屬性”/“常規”/”啟用32位應用程式,設定為 true。

    這裡寫圖片描述

這裡寫圖片描述

  • 生成->配置管理器->平臺->點選Any Cpu選項卡->新建->新建平臺->X86。

這裡寫圖片描述

方案四

  • Microsoft.Jet.OLEDB.4.0 不要寫成Miscrosoft.Jet.OLEDB.4.0,;

  • Data Source不要寫成“Data Sourse”

  • 檢查是否安裝了Office