【发布时间】:2019-06-04 10:34:13
【问题描述】:
我正在为 AutoCAD 开发插件,需要从 Microsoft Access 读取数据。但我总是遇到异常:
“microsoft.xxx.oledb.x.0”提供程序未在本地计算机上注册
Windows 10 1803 + Office 365 + Microsoft Access 数据库引擎 2010 + Autodesk AutoCAD 2015
单元测试代码:
var path = "path_to_mdb_file");
var connectionString = $"Provider=Microsoft.Jet.OLEDB.4.0;Data source={path}";
using (var connection = new OleDbConnection(connectionString))
{
connection.Open();
...
测试通过
var path = "path_to_mdb_file");
var connectionString = $"Provider=Microsoft.ACE.OLEDB.12.0;Data source={path}";
using (var connection = new OleDbConnection(connectionString))
{
connection.Open();
...
例外: the 'microsoft.ace.oledb.12.0' provider is not registered on the local machine
CAD插件代码:
var path = "path_to_mdb_file");
var connectionString = $"Provider=Microsoft.Jet.OLEDB.4.0;Data source={path}";
using (var connection = new OleDbConnection(connectionString))
{
connection.Open();
...
例外: the 'Microsoft.Jet.OLEDB.4.0' provider is not registered on the local machine
var path = "path_to_mdb_file");
var connectionString = $"Provider=Microsoft.ACE.OLEDB.12.0;Data source={path}";
using (var connection = new OleDbConnection(connectionString))
{
connection.Open();
...
一切正常。
相同的代码,不同的结果,为什么?
【问题讨论】:
-
确保位数匹配 - 如果 AutoCAD 是 64 位,则需要 64 位访问引擎,32 位同上。
-
此外,
Microsoft.Jet.OLEDB.4.0提供程序在 x64 中不可用。但是Microsoft.ACE.OLEDB.12.0提供程序确实完全支持 JET 4.0 数据库。更复杂的是,如果您安装 Office 2013(即 ACE 15),它将“重定向”要求 ACE 12 提供程序使用 ACE 15 的请求 - 这是一个障碍,因为 ACE 15 不支持 JET 3.0 数据库(但仍支持 JET 4.0)。不幸的是,情况一团糟:stackoverflow.com/a/23824128/159145