我最近制作了一个应用程序来与 Access 数据库文件 (.mdb) 进行交互。我一直在开发机器上使用“Microsoft.ACE.OLEDB.12.0”提供程序。当我尝试在目标计算机 (Windows 7) 上安装该程序时,它一直给出错误,提示“本地机器上未注册‘Microsoft.ACE.OLEDB.12.0’提供程序”。
这似乎是一个常见错误,显然是由于未安装数据库提供程序而导致的。通过一些研究,我发现 Access 2007 Runtime 有一个 32 位版本,而较新版本的运行时/数据库引擎则有 32 位/64 位版本。
我最初尝试使用 Access 2007 运行时来安装提供程序,因为我不确定运行此应用程序的任何计算机都会使用 32 位还是 64 位 MS Office,并且想避免兼容性检查。虽然安装成功,但仍会抛出异常。我改用 Access 2010 运行时,只是为了看看它是否能正常工作,但仍然没有结果。驱动程序不会显示在目标机器上。
每次安装完成后,我都会打开 Powershell 并运行
(New-Object system.data.oledb.oledbenumerator).GetElements()
返回
SQLOLEDB
MSDataShape
ADsDSOObject
Windows Search Data Source
MSDASQL
MSDASQL Enumerator
SQLOLEDB Enumerator
MSDAOSP
MSIDXS
这些都不是 ACE 12.0 提供程序。为了进行比较,我在开发机器上运行了同样的命令,结果返回
SQLOLEDB
MSDataShape
SQLNCLI11
Microsoft.ACE.OLEDB.12.0
Microsoft.ACE.OLEDB.16.0
ADsDSOObject
SQLNCLI11 Enumerator
Windows Search Data Source
MSDASQL
MSDASQL Enumerator
MSOLAP
MSOLAP
SQLOLEDB Enumerator
MSDAOSP
我甚至检查了 ODBC 数据源管理器 (C:\Windows\System32\odbcad32.exe),它显示目标机器上没有 Access 驱动程序,但显示 ACEODBC.dll 文件在我的开发机器上。
我不知道还能尝试什么。我所做的每次搜索都说要么使用 2007 运行时,要么使用 2010 引擎,但都没有在机器上安装驱动程序。我还能如何在目标机器上获取 Microsoft.ACE.OLEDB.12.0 提供程序?
编辑:还值得一提的是,正如我在关于该主题的其他一些帖子中看到的那样,它应该在 C:\Program Files (x86)\Common Files\microsoft shared\OFFICE14 中寻找 ACEOLEDB.DLL,但是,我的目标计算机上没有 OFFICE14 文件夹。