當 LinqToExcel 套件 遇到 Microsoft.ACE.OLEDB.12.0' 提供者並未登錄於本機電腦上Exception

程式開發完畢本機測試沒有問題,將Web發佈到IIS上,

發生錯誤:Microsoft.ACE.OLEDB.12.0' 提供者並未登錄於本機電腦上。

 

因為Server上沒有安裝Access Database Engine 2010 的驅動程式

直接下載安裝的 AccessDatabaseEngine.exe

因使用者可能會呼叫的環境是(Win 7 X64),所以要一併將 64位元的版本裝上去.....

因此需下載AccessDatabaseEngine_X64.exe 執行安裝。

若需將 64 位元與 32 位元版本的並存,

將AccessDatabaseEngine_X64.exe放置C:\

安裝在同一作業系統上需在命令列提示列(cmd)中,並執行

cd c:\
AccessDatabaseEngine_X64.exe /passive

 

結果我安裝完後還是發生 Microsoft.ACE.OLEDB.12.0' 提供者並未登錄於本機電腦上。

因此又繼續加裝了2007 Office system 驅動程式:資料連線元件

Server上即可讀取Excel並用linqToExcel轉成C#物件。

var fullFileName = System.IO.Path.Combine(@"C:\", "Book.xlsx"); //取得檔案
var products = default(IEnumerable<Products>);//範例(回傳類型)
try
{
    var excel = new LinqToExcel.ExcelQueryFactory(fullFileName);//取得EXCEL及其中資料
    products = (from x in excel.Worksheet<Products>("工作表名稱。ex:Sheet1")
                select x).AsEnumerable();
}
catch (Exception ex)
{
    throw Exception($"{ex.Message}");
}
            
return products;

而後,突然出現異常狀況,偵錯後發現 LinqToExcel元件出現異常(Exception:外部元件傳回例外狀況)

只要將網站執行的Application Pool開啟32位元相容,位置:

IIS->應用程式集區->選擇網站執行的Pool->進階設定

Enable 32-Bit Application(啟用32位元應用程式) 設定成 True即可!