前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【.net】未在本地计算机上注册“microsoft.ACE.oledb.12.0”提供程序解决办法 目录

【.net】未在本地计算机上注册“microsoft.ACE.oledb.12.0”提供程序解决办法 目录

作者头像
庞小明
发布2019-08-07 16:07:22
8.3K1
发布2019-08-07 16:07:22
举报
文章被收录于专栏:pangguoming

正文

回到顶部

#错误描述:

  在开发.net项目中,通过microsoft.ACE.oledb读取excel文件信息时,报错:

  “未在本地计算机上注册“microsoft.ACE.oledb.12.0”提供程序”

回到顶部

#代码示例:

代码语言:javascript
复制
 1      static void Main(string[] args)
 2         {
 3             readexcel("D:\\test\\xlsxtest.xlsx");
 4         }
 5         public static void readexcel(string _path)
 6         {
 7             DataTable dt = new DataTable();
 8             string connectionString = "Provider=Microsoft.ACE.OLEDB.12.0;" + "Data Source=" + _path + ";" + "Extended Properties=\"Excel 12.0;HDR=No\"";
 9 
10             using (OleDbConnection connection = new OleDbConnection(connectionString))
11             {
12                 string SQL = "select * from [sheet1$]";
13                 try
14                 {
15                     OleDbCommand comm = new OleDbCommand(SQL, connection);
16                     if (connection.State != ConnectionState.Open)
17                         connection.Open();
18                     OleDbDataAdapter Adpter = new OleDbDataAdapter(comm);
19                     Adpter.Fill(dt);
20                 }
21                 catch (Exception ex)
22                 {
23                     dt = null;
24                 }
25                 finally
26                 {
27                     if (connection.State == ConnectionState.Open)
28                         connection.Close();
29                 }
30 
31                 foreach (DataRow item in dt.Rows)
32                 {
33                     string sds = item[0].ToString();
34                     Console.WriteLine(item[0].ToString() + "//" + item[1].ToString() + "//" + item[2].ToString());
35                     if (item[1].ToString() == string.Empty)
36                     {
37                         break;
38                     }
39                 }
40                 Console.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 驱动程序:数据连接组件

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工作簿。
代码语言:javascript
复制
  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
代码语言:javascript
复制
  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/

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-08-06 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • #错误描述:
  • #代码示例:
  • #报错原因:
  • #解决方案:
    •   1、安装数据访问组件:
      •   1)适用于office2007的
        •   2)适用于office2010的
          •   2、在IIS应用程序池中,设置“”启用兼容32位应用程序”,此设置适用于web项目;
            •   3、连接字符串
              •   1)使用Office 2007 OLEDB驱动程序(ACE 12.0)连接到较旧的97-2003 Excel工作簿。
                •   2)读取xlsx格式的excel
                相关产品与服务
                数据库
                云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档