未在本地计算机上注册“microsoft.ACE.oledb.12.0”提供程序报错的解决办法
错误描述:
在开发.net项目中,通过microsoft.ace.oledb读取excel文件信息时,报错:
“未在本地计算机上注册“microsoft.ace.oledb.12.0”提供程序”
代码示例:
static void main(string[] args) { readexcel("d:\\test\\xlsxtest.xlsx"); } public static void readexcel(string _path) { datatable dt = new datatable(); string connectionstring = "provider=microsoft.ace.oledb.12.0;" + "data source=" + _path + ";" + "extended properties=\"excel 12.0;hdr=no\""; using (oledbconnection connection = new oledbconnection(connectionstring)) { string sql = "select * from [sheet1$]"; try { oledbcommand comm = new oledbcommand(sql, connection); if (connection.state != connectionstate.open) connection.open(); oledbdataadapter adpter = new oledbdataadapter(comm); adpter.fill(dt); } catch (exception ex) { dt = null; } finally { if (connection.state == connectionstate.open) connection.close(); } foreach (datarow item in dt.rows) { string sds = item[0].tostring(); console.writeline(item[0].tostring() + "//" + item[1].tostring() + "//" + item[2].tostring()); if (item[1].tostring() == string.empty) { break; } } console.readkey(); } }
报错原因:
主要有以下几种原因:
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 驱动程序:数据连接组件
https://www.microsoft.com/zh-cn/download/details.aspx?id=23734 (该链接已失效,直接用microsoft access database engine 2010 redistributable就好了)
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 和文本文件建立连接。
此外,还会安装 odbc 和 oledb 驱动程序,供应用程序开发人员在开发与 office 文件格式连接的应用程序时使用。
2、在iis应用程序池中,设置“”启用兼容32位应用程序”,此设置适用于web项目;
如图:
注意:
在下载microsoft access database engine 2010 redistributable时会让选择下载x86的还是x64的,如图:
前提是看服务器是x64的还是x86的,x64的服务器两个版本都能安装;
如果下载安装的是x64的,那么你的桌面程序就要选择anycpu或x64发布,而web项目是不兼容的,不管你是如何发布的;
如果下载安装的是x86的,那么你的桌面程序就要选择x86发布,而web项目正常发布就好;
*总结:如果你是web项目,你就下载x86的,发布选anycpu就好了,然后设置应用程序池32位兼容就好了;
*最后说一句,用这个,是不需要安装office软件的;
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
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/
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对的支持。
推荐阅读
-
IIS7.5 提示未在本地计算机上注册“Microsoft.Jet.OleDb.4.0”提供程序
-
“未在本地计算机上注册“Microsoft.ACE.OLEDB.12.0”提供程序”的解决方案
-
"未在本地计算机注册“OraOLEDB.Oracle.1”提供程序"问题的两种解决方法
-
SQL server 导入数据 的时候报错:未在本地计算机上注册“Microsoft.ACE.OLEDB.12.0”提供程序
-
C#读取excel文件提示未在本地计算机上注册“Microsoft.ACE.OLEDB.12.0”提供程序
-
未在本地计算机上注册“Microsoft.Jet.OleDb.4.0”提供程序错误的解决方法
-
未在本地计算机上注册“microsoft.ACE.oledb.12.0”提供程序报错的解决办法
-
SQL SERVER导入EXCEL文件:未在本地计算机上注册“Microsoft.ACE.OLEDB.12.0”提供程序
-
IIS7.5 提示未在本地计算机上注册“Microsoft.Jet.OleDb.4.0”提供程序
-
未在本地计算机上注册“microsoft.ACE.oledb.12.0”提供程序解决办法