未在本地計算機上註冊“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
但是安裝的時候會出現問題。你從微軟的主頁下載,會發現有兩個版本,一個是位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