使用C#读取Excel文件时出现问题,出现ACE问题

时间:2020-07-09 08:15:56

标签: c# excel connection-string oledb ms-jet-ace

我已经阅读了很多有关此问题的信息。
SO对此有很多问题,但问题仍然存在,如下所示:

我知道此connection string适用于Office的较旧版本:

string oldCon = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" 
              + path + ";" + "Extended Properties='Excel 8.0;HDR=NO;IMEX=1;'";

我知道Office的较新版本有以下connection string

string nweCon = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" 
              + path + ";Extended Properties=Excel 12.0;";

但是,当我将connection string用于带有 ACE 的较新版本时,出现此错误:

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

我还阅读了其他问题,我应该先安装 ACE ,然后一切正常。

  • 我没有安装 ACE 驱动程序,其他应使用该应用程序的计算机也没有安装,是否可以使用 JET 读取Excel文件Office 2016或365( 2003年以上的所有产品)。

  • 我不能在每个客户端中都安装 ACE 以便能够与我的应用程序一起使用,这根本不实用。

有没有办法做到这一点?

1 个答案:

答案 0 :(得分:1)

很多年前,我不得不解决完全相同的问题。我将两个连接字符串都添加到了配置中。首次使用该应用程序时,我检查了一个ACE驱动程序(因为它是更新的)。如果失败,我将退回到Jet。将工作连接字符串保存在AppConfig中(您也可以将值保存到config)。因此,下次运行该应用程序时,它将首先检查应用程序配置并在该计算机上使用该连接字符串。

这是我遵循的步骤:

  1. 在计算机上首次启动/使用应用程序时,请尝试从AppConfig获取工作连接字符串。
  2. 由于它将不可用,因此请检查可能的连接字符串列表。
  3. 从ACE驱动程序开始。成功后,将其保存在AppConfig中。
  4. 如果ACE失败,请检查下一个驱动程序(Jet)。如果成功,请将其另存为工作连接字符串。
  5. 下次启动应用程序时,请检查工作连接字符串并继续进行操作。这样,您就不必一次又一次地检查两个驱动程序。

注意:将设置更新为AppConfig文件时,它们不会直接更新为原始文件。在C:\ Users ...下为该用户创建了一个文件副本。当您尝试从AppConfig加载值时,这两个文件被“合并”并使用。这是在C#中自动处理的。

基于上述内容,如果您必须重置选择,则必须删除上面用户文件夹中的配置文件,这应该从步骤1重新开始。