【.net】未在本地計算機上註冊“microsoft.ACE.oledb.12.0”提供程式解決辦法
#錯誤描述:
在開發.net專案中,通過microsoft.ACE.oledb讀取excel檔案資訊時,報錯:
“未在本地計算機上註冊“microsoft.ACE.oledb.12.0”提供程式”
#程式碼示例:
1 static void Main(string[] args) 2{ 3readexcel("D:\\test\\xlsxtest.xlsx"); 4} 5public static void readexcel(string _path) 6{ 7DataTable dt = new DataTable(); 8string connectionString = "Provider=Microsoft.ACE.OLEDB.12.0;" + "Data Source=" + _path + ";" + "Extended Properties=\"Excel 12.0;HDR=No\""; 9 10using (OleDbConnection connection = new OleDbConnection(connectionString)) 11{ 12string SQL = "select * from [sheet1$]"; 13try 14{ 15OleDbCommand comm = new OleDbCommand(SQL, connection); 16if (connection.State != ConnectionState.Open) 17connection.Open(); 18OleDbDataAdapter Adpter = new OleDbDataAdapter(comm); 19Adpter.Fill(dt); 20} 21catch (Exception ex) 22{ 23dt = null; 24} 25finally 26{ 27if (connection.State == ConnectionState.Open) 28connection.Close(); 29} 30 31foreach (DataRow item in dt.Rows) 32{ 33string sds = item[0].ToString(); 34Console.WriteLine(item[0].ToString() + "//" + item[1].ToString() + "//" + item[2].ToString()); 35if (item[1].ToString() == string.Empty) 36{ 37break; 38} 39} 40Console.ReadKey(); 41} 42}
#報錯原因:
主要有以下幾種原因:
1、沒有安裝資料訪問元件,需要安裝相應版本的資料訪問元件( AccessDatabaseEngine );
2、沒有安裝相應版本的Office客戶端,需要安裝相應版本的Office客戶端;
3、沒有在IIS應用程式池配置預設屬性,需要在相應的IIS應用程式池啟用32位應用程式;
4、連線字串的問題。採用Microsoft.Jet.OleDb.4.0,可以讀取excel2007以前的版本,在客戶機上不需要部署office,採用Microsoft.Ace.OleDb.12.0的時候,需要安裝引擎。
5、順便說一下,在使用“Microsoft.Jet.OLEDB.4.0”,也會報類似錯誤,原因有可能是,Microsoft.Jet.OLEDB.4.0在64位系統上不支援,需要修改架構,從x64改為x86,無論是WinForm還是ASP.NET;或者修改連線字串為Microsoft.ACE.OLEDB.12.0並且安裝AccessDatabaseEngine x64資料訪問元件;
#解決方案:
1、安裝資料訪問元件:
1)適用於office2007的
Microsoft Access Database Engine 2007 Office system 驅動程式:資料連線元件
ofollow,noindex">https://www.microsoft.com/zh-cn/download/details.aspx?id=23734
2)適用於office2010的
Microsoft Access Database Engine 2010 Redistributable
https://www.microsoft.com/zh-CN/download/details.aspx?id=13255
此下載將安裝一組元件,非 Microsoft Office 應用程式可以使用它們從 2007/2010 Office system 檔案中讀取資料,例如從 Microsoft Office Access 2007/2010(mdb 和 accdb)檔案以及 Microsoft Office Excel 2007/2010(xls、xlsx 和 xlsb)檔案中讀取資料。這些元件還支援與 Microsoft Windows SharePoint Services 和文字檔案建立連線。
2、在IIS應用程式池中,設定“” 啟用相容 32 位應用程式”,此設定適用於web專案;
如圖:
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
3、連線字串
主要如下兩種情況:
1)使用Office 2007 OLEDB驅動程式(ACE 12.0)連線到較舊的97-2003 Excel工作簿。
Provider=Microsoft.ACE.OLEDB.12.0;Data Source=c:\\myFolder\\myOldExcelFile.xls; Extended Properties="Excel 8.0;HDR=YES";
“HDR =Yes;” 表示第一行包含列名,而不是資料。 “HDR =No;” 表明相反;
2)讀取xlsx格式的excel
Provider=Microsoft.ACE.OLEDB.12.0;Data Source=c:\\myFolder\\myExcel2007file.xlsx; Extended Properties="Excel 12.0 Xml;HDR=YES";
“HDR =Yes;” 表示第一行包含列名,而不是資料。“HDR =No;” 表明相反;
Microsoft.ACE.OLEDB連線字串參考地址: https://www.connectionstrings.com/ace-oledb-12-0/