我们发现,如果我们使用安装了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
}
答案 0 :(得分:0)
简短的回答是不,没有。使用AnyCpu时,您的代码将在64位系统上以64位代码执行,在32位系统上以32位代码执行。以64位执行的应用程序不能使用32位驱动程序(反之亦然)。 Microsoft.ACE.OLEDB.12.0有两个不同版本的64和32位,不能在同一台机器上一起安装。因此,最佳解决方案是根据计算机上可用的驱动程序将代码编译为x86或x64。