如何解决未在本地计算机上注册“microsoft.ACE.oledb.12.0”提供程序报错的问题
创始人
2024-11-27 15:42:05
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.ACE.oledb.12.0”提供程序报错的问题

注意:

在下载Microsoft Access Database Engine 2010 Redistributable时会让选择下载x86的还是x64的,如图:

如何解决未在本地计算机上注册“microsoft.ACE.oledb.12.0”提供程序报错的问题 

前提是看服务器是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/

相关内容

热门资讯

空调连续工作多久需要停机休息 空调连续工作的时间取决于多个因素,包括空调的型号、功率、使用环境和维护情况等。一般来说,空调可以连续...
空调哪个符号是除湿的 空调除湿功能通常用一个水滴形状的符号表示。不同品牌和型号的空调遥控器可能会有所差异,但一般来说,除湿...
格力空调多长时间加一次氟利昂 1、一般情况下,空调对氟利昂的使用量是非常小的,所以在空调使用了四年左右的时候再考虑加也没问题。2、...
空调用多长时间需要加氟一次 一般情况下是五年。当出现以下这几种情况时,空调才需要加氟。1、空调的室内机和室外机各有两个接口,当接...
格调生活·C标思享荟:卡萨帝在... 9月12日的郑州龙湖金融岛,夜风轻拂,灯光璀璨。“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑...
品牌价值破千亿、高端份额持续领... 9月12日,“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑州站”在郑州龙湖金融岛举办。2026...
空调主板坏了修800还是换新的 空调主板坏了是修还是换新,需要考虑多个因素,以下是一些建议:1. 维修成本:如果维修费用较低,比如 ...
空调开多久需要休息多长时间 问题:空调开多久需要休息多长时间回答:1、在使用空调的过程中,一般空调开7~8个小时左右需要休息2~...
中央空调多长时间清洗一次 1、一般空调开机前清洗一次即可,空调开机中间时段再清洗一次,空调关机时清洗一次,这样比较合理。2、空...
中央空调氟利昂多久加一次 看空调制热和制冷程度,很多人的观点认为氟利昂必须一年放一次,其实这个观点是错误的,理解上面有点偏差,...