对于所有仍然受此影响的人。
我一直收到错误...
OLEDB error "The 'Microsoft.ACE.OLEDB.12.0' provider is not registered on the local machine."
...如 OP 所描述的,Shailesh Sahu。
我有 64 位 Windows 7。
我的问题在PowerShell脚本中,但使用的是连接字符串,类似于 OP 的帖子,所以希望我的发现可以应用于 C#、PowerShell 和任何其他依赖“Microsoft.ACE.OLEDB”驱动程序的语言。
我按照这个 MS 论坛主题的说明进行操作:http: //goo.gl/h73RmI
我首先尝试安装64 位版本,然后从该页面http://www.microsoft.com/en-us/download/details.aspx?id=13255安装32 位版本的 AccessDatabaseEngine.exe
但仍然没有喜悦。
然后我在PowerShell中运行下面的代码(来自 SQL Panda 的网站http://goo.gl/A3Hu96)
(New-Object system.data.oledb.oledbenumerator).GetElements() | select SOURCES_NAME, SOURCES_DESCRIPTION
...这给了我这个结果(为简洁起见,我删除了其他数据源)...
SOURCES_NAME SOURCES_DESCRIPTION
------------ -------------------
Microsoft.ACE.OLEDB.15.0 Microsoft Office 15.0 Access Database Engine OLE DB Provider
如您所见,我有 Microsoft.ACE.OLEDB。15 .0(十五)不是 Microsoft.ACE.OLEDB。12 .0(十二)
所以,我将我的连接字符串修改为 15 并且它起作用了。
所以,一个快速的 PowerShell 片段来演示如何对版本进行软编码......
$AceVersion = ((New-Object System.Data.OleDb.OleDbEnumerator).GetElements() | Where-Object { $_.SOURCES_NAME -like "Microsoft.ACE.OLEDB*" } | Sort-Object SOURCES_NAME -Descending | Select-Object -First 1 SOURCES_NAME).SOURCES_NAME
$connString = "Provider=$AceVersion;Data Source=`"$filepath`";Extended Properties=`"Excel 12.0 Xml;HDR=NO`";"
修改为选择最新的 ACE 版本,如果超过一个
希望发现此问题的任何人现在都可以检查安装的 OLEDB 版本并使用适当的版本号。