oledb.12.0 提供程序未在本地计算机上注册,但适用于某些应用程序

Posted

技术标签:

【中文标题】oledb.12.0 提供程序未在本地计算机上注册,但适用于某些应用程序【英文标题】:oledb.12.0 provider is not registered on the local machine but working for some applications 【发布时间】:2016-05-18 08:28:20 【问题描述】:

我需要将一个 excel 文件读取到数据表中。 我有这个代码:

      public static DataTable LoadExcelFileToDatatable(string Filename, string SheetName = "Sheet1")
  
      try
      
          string connectionString = System.String.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=0;Extended Properties=\"Excel 8.0;HDR=YES\";", Filename);
          string query = System.String.Format("SELECT * from [0$]", SheetName);
          OleDbDataAdapter dataAdapter = new OleDbDataAdapter(query, connectionString);
          DataSet dataSet = new DataSet();
          dataAdapter.Fill(dataSet);
          DataTable dt = dataSet.Tables[0];

          return dt;
      
      catch (Exception ex)
      

          throw ex;
      
  

在我正在使用的项目中,调用 LoadExcelFileToDatatable() 会抛出 “oledb.12.0 提供程序未在本地计算机上注册” 但是,如果我创建了一个新项目并调用了相同的方法,它将正常工作! 谢谢

【问题讨论】:

【参考方案1】:

卸载提供程序并重新安装它,当您需要选择用户时,在安装表单中选择“For Everyone”而不是“Just Me”

【讨论】:

虽然我第二次重新安装它不应该使 1 个项目工作而不是另一个.. 鉴于 OP 在这两个项目中都声明了相同的方法。【参考方案2】:

这取决于 office 版本。

您在属性中使用 excel 8.0。仅支持 97-2003 格式。

请参考以下链接

https://www.connectionstrings.com/excel/

【讨论】:

当你在扩展道具中给它错误的版本时,提供者似乎并不关心。扩展的道具也用于文件而不是提供者本身。 感谢您的回复,但是当调用相同的函数来读取相同的 excel 文件 (2007) 但在我为测试创建的另一个应用程序中时,相同的函数正在工作!

以上是关于oledb.12.0 提供程序未在本地计算机上注册,但适用于某些应用程序的主要内容,如果未能解决你的问题,请参考以下文章

oledb.12.0 提供程序未在本地计算机上注册,但适用于某些应用程序

未在本地计算机上注册“Microsoft.Ace.OleDb.12.0”提供程序。

错误:“Microsoft.Ace.OLEDB.12.0”提供程序未在本地计算机上注册 [重复]

System.InvalidOperationException:“Microsoft.ACE.OLEDB.12.0”提供程序未在本地计算机上注册

未在本地计算机上注册 Microsoft.ACE.OLEDB.12.0 提供程序

Microsoft.ACE.OLEDB.12.0' 提供程序未在本地计算机上注册“如果导入 (.xlsb) Excel 二进制格式文件