对于所有仍受此影响的人。
我一直在得到错误...
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位版本,然后从此页面安装AccessDatabaseEngine.exe 的32位版本
http://www.microsoft.com/zh-cn/download/details.aspx?id=13255
但是仍然没有喜悦。
然后,我在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版本并使用适当的版本号。