使用C#開發的Web系統,其中有項功能,上傳Excel報表,從Excel里讀取數據,導入到數據庫中。
從10月底開始,使用者反應無法正常使用,報如下錯誤信息:
Unexpected error from external database driver (1)
經查,所有的批量導入都出現這個錯誤,不能導入,因此判斷為是服務器上系統環境發生了改變。
網上查詢,是由於10月10日微軟發布了新的補丁程序,打了此補丁以后,會影響到讀取Excel的引擎。
程序中如果是使用“Provider=Microsoft.Jet.OLEDB.4.0“,則會受影響。
解決辦法:
1、卸載此補丁程序
我從控制面板--->刪除程序,未找到此補丁程序。
2、使用新的引擎
程序改為”Provider=Microsoft.ACE.OLEDB.12.0“
經如此修改后,我有兩個系統,分別部署在A、B服務器上。
1)、A服務器,系統環境Win 2008 R2 64bit English,Office 2010 32bit
在此服務器上,程序更新上去以后,批量導入恢復正常。
2)、B服務器,系統環境Win 2008 R2 64bit English,Office 2010 64bit
在此服務器上,程序更新上去以后 ,批量導入仍然不能使用。報如下錯誤信息:
The 'Microsoft.ACE.OLEDB.12.0' provider is not registered on the local machine.
檢查IIS,應用程序池里已經啟用了32位程序的使用。
依照網上查詢的下載了新的引擎AccessDatabaseEngine.exe,這個是適用於32位的,又下載了AccessDatabaseEngine_X64.exe(適用於64位)的。
安裝AccessDatabaseEngine.exe,提示服務器上當前安裝的是64位的Office,不能安裝此引擎。
安裝AccessDatabaseEngine_X64.exe,可以正常安裝,但使用批量導入,仍然報錯。
報錯誤信息:The 'Microsoft.ACE.OLEDB.12.0' provider is not registered on the local machine.
考慮到Web程序是在32位的開發環境下開發的,應該使用32位的引擎。
經網上查詢,采用下面方法安裝適用於32位的AccessDatabaseEngine.exe,增加參數 /passive,可以繞開檢查服務器上當前是64位Office 的檢查
運行--->CMD,進入Dos命令行,進入AccessDatabaseEngine.exe所在文件夾,如下:
C:\xxx\AccessDatabaseEngine.exe /passive
安裝成功后,批量導入作業恢復正常
在控制面板里,查看,安裝后呈現下面情況:
