【问题标题】:Is there a way to ensure the correct OleDB provider gets used when PlatformTarget=AnyCPU?有没有办法确保在 PlatformTarget=AnyCPU 时使用正确的 OleDB 提供程序?
【发布时间】:2015-07-16 00:06:33
【问题描述】:

我们发现,如果我们使用 Microsoft.ACE OLEDB 提供程序从安装了 32 位版本 Office 的 64 位计算机读取 Excel 文件,如果为“AnyCPU”平台构建,则会引发异常.

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

solutions posted here 似乎都是关于将构建平台更改为 x86,或者在用户机器上安装 64 位数据访问组件,这对我们来说都不是理想的解决方案。

有没有其他方法可以通过c#代码确保读取32位版本的OLEDB数据提供者?

示例代码:

string connString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\test.xlsx;Extended Properties=Excel 8.0;";

using(OleDbConnection connection = new OleDbConnection(connString))
{
    connection.Open(); // exception here
}

【问题讨论】:

    标签: c# excel oledb


    【解决方案1】:

    简短的回答是不,没有。使用 AnyCpu 时,您的代码将在 64 位系统上作为 64 位代码执行,在 32 位系统上作为 32 位代码执行。以 64 位执行的应用程序不能使用 32 位驱动程序(反之亦然)。 Microsoft.ACE.OLEDB.12.0 有两个不同的 64 位和 32 位版本,不能一起安装在同一台机器上。因此,最好的解决方案是根据机器上可用的驱动程序将您的代码编译为 x86 或 x64。

    【讨论】:

      猜你喜欢
      • 2014-02-27
      • 2021-11-25
      • 1970-01-01
      • 2018-02-27
      • 2023-04-02
      • 2013-01-04
      • 2023-03-06
      • 1970-01-01
      • 2011-08-28
      相关资源
      最近更新 更多