有没有办法确保在PlatformTarget = AnyCPU时使用正确的OleDB提供程序?

时间:2015-07-15 16:02:18

标签: c# excel oledb

我们发现,如果我们使用安装了32位版本Office的64位计算机上的Microsoft.ACE OLEDB提供程序从Excel文件中读取,如果为平台构建,则会引发异常#34; 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
}

1 个答案:

答案 0 :(得分:0)

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