对于所有仍然受到影响的人。
我一直在收到错误信息...
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位版本,然后安装来自此页面的32位版本AccessDatabaseEngine.exe
http://www.microsoft.com/en-us/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版本并使用相应的版本号。
execute master.dbo.xp_enum_oledb_providers
它会告诉你它认为你有哪些提供商。它告诉我我有Microsoft.ACE.OLEDB.16.0和Microsoft.ACE.OLEDB.12.0两个提供商,但当我尝试导入数据时,对于Excel 16和Excel 2007文件格式(oledb.16.0和oledb.12.0),我得到了与OP相同的“未在本地计算机上注册”的错误。此时放弃微软软件是明智的选择。 - user1040323execute master.dbo.xp_enum_oledb_providers
命令可以告诉你服务器上有哪些内容,而不是你的本地计算机。 - Nathan Goings