是否有一种方法来确保正确的OleDB提供程序得到使用时,PlatformTarget=AnyCPU

本文关键字:程序 AnyCPU PlatformTarget OleDB 一种 方法 确保 是否 | 更新日期: 2023-09-27 18:03:04

我们发现,如果我们使用Microsoft。如果在64位机器上安装了32位版本的Office,它将抛出一个异常,如果为平台"AnyCPU"构建。

没有在本地机器上注册'Microsoft.ACE.OLEDB.12.0'提供程序。

这里发布的解决方案似乎都是关于将构建平台更改为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
}

是否有一种方法来确保正确的OleDB提供程序得到使用时,PlatformTarget=AnyCPU

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