“Microsoft.ACE.OLEDB.12.0”提供程序未在本地计算机注册。

573

我正在尝试在按钮单击事件中从Excel文件中获取数据。我的连接字符串是:

 string connString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\source\\SiteCore65\\Individual-Data.xls;Extended Properties=Excel 8.0;";

当我点击按钮时,我得到了以下错误:

'Microsoft.ACE.OLEDB.12.0'提供程序未在本地计算机上注册。

我不知道如何解决这个问题。我的操作系统是Windows 7。


12
只是一个旁注:使用OLEDB读取Excel文件是过时的技术,速度非常慢,并且正如你所发现的,需要在目标计算机上手动安装额外的软件包。(诚然,这个问题是在2011年提出的。)最好使用ClosedXml(可在NuGet上获得),它可以直接使用。 - Shaul Behr
7
很抱歉,ClosedXML 只支持 .xlsx 格式的文件,不支持 .xls 格式。 - Jimmy
6
如果你正在导入到Sql Server中,你可以从ssms运行以下查询: 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相同的“未在本地计算机上注册”的错误。此时放弃微软软件是明智的选择。 - user1040323
1
还可以参考此答案 https://dev59.com/TGYq5IYBdhLWcg3wixJr#14401857,了解 Microsoft.Jet.OleDb 和 Microsoft.Ace.OleDb 之间的区别。 - Jeff Widmer
4
@user1040323,执行execute master.dbo.xp_enum_oledb_providers命令可以告诉你服务器上有哪些内容,而不是你的本地计算机 - Nathan Goings
6
这是可以工作的版本: 并没有真正记录,但我找到了一种安装32位和64位版本的方法。只需将命令行参数“/passive”添加到命令中即可:“C:\ directory path \ AccessDatabaseEngine_x64.exe” /passive_ - TaW
39个回答

3

适用于Visual Studio 2022(及更新版本)

我每次都会遇到这个错误,但它并没有帮助我解决任何问题。VS2019是解决方案。

https://learn.microsoft.com/en-us/visualstudio/data-tools/accessing-data-in-visual-studio?view=vs-2022#data-providers

如果您使用Visual Studio 2022连接数据库,您需要知道Visual Studio 2022是一个64位进程。这意味着Visual Studio中的一些数据工具将无法使用32位数据提供程序连接到OLEDB或ODBC数据库。

如果您需要维护连接到OLEDB或ODBC数据库的32位应用程序,则仍然可以使用Visual Studio 2022构建和运行该应用程序。但是,如果您需要使用任何Visual Studio数据工具,例如服务器资源管理器、数据源向导或数据集设计器,则需要使用早期版本的Visual Studio,该版本仍然是32位进程。最后一个32位进程的Visual Studio版本是Visual Studio 2019。


3
我在读取Excel文件时遇到了类似的问题。
问题历史:
我们最近将应用程序从32位迁移到了64位,因为需要更多的内存。为此,我们将Windows 7从32位迁移到了64位。但是我们仍然在机器上安装了32位的Office。
因此,在将Excel数据导入应用程序时出现了问题。
解决方法:
我下载了64位版本的http://www.microsoft.com/en-us/download/details.aspx?id=13255并使用参数进行安装,
AccessDatabaseEngine_x64.exe /passive 没有任何代码更改,我的问题得到了解决。
注意:
在64位操作系统和64位office上,我的功能正常工作,无需进行此修复。只有在我们的应用程序在64位操作系统上运行,并且安装了32位office时才需要此修复。

但是,微软反对这种解决方案。我的一些客户因为这个修复程序在其他 Office 程序中观察到了失真。 - Rahul Techie

3

当我从Excel文件导入数据到MS-SQL时,遇到了这个错误。 提供程序已经安装(64位),这让我感到惊讶,为什么它不起作用呢。 所以我所做的就是找到这里使用的导入/导出应用程序,即.EXE。 我在这里找到它:

C:\Program Files\Microsoft SQL Server\130\DTS\Binn\DTSWizard.exe

然后我直接运行.exe执行数据导入。 然后就可以了!


嗯,我有几个版本在那里,SSMS可能使用了错误的版本。 - SteveCav
在我的情况下,它位于C:\Program Files\Microsoft SQL Server\150\DTS\Binn,只需找到DTS的位置即可。 - programmer21

2

2
如果您在尝试从ASP.NET应用程序使用ACE时遇到此错误,则最有可能的原因是您安装了32位版本之一。默认情况下,64位操作系统上的IIS将在64位工作进程中运行应用程序。64位进程无法加载32位DLL。当对ACE提供程序进行调用时,64位进程将尝试查找64位DLL。如果不存在,则会显示带来您这里的错误消息。
在这种情况下,您有两个选择。首先,您可以安装2010年的64位版本。如果已安装了2007年的32位版本,则可以将其与2010年的64位版本一起安装。如果安装了32位版本的2010,则需要卸载它并下载并安装64位的2010版本。不能同时安装2010年提供程序的32位和64位版本。如果您正在开发计算机上执行安装,则还可能受到任何现有Office安装的位数限制。
第二个选项是更改IIS中的应用程序池以启用32位应用程序。如果您使用的是完整版本的IIS,则可以使用管理工具来完成此操作(控制面板»管理工具»Internet信息服务(IIS)管理器)。
要了解更多,请参考以下链接link

2
我按照其他人的指示进行操作,安装了这个补丁、那个补丁以及Microsoft Access Database Engine 2010。
我的问题是,在我的计算机上有两个使用相同库(linq2sql)的站点;一个可以工作,而另一个不行。
最终我发现,我需要在我不工作的站点的应用程序池的高级设置中“启用32位应用程序”。
现在一切都正常了。

1
我遇到了同样的问题,但在这种情况下,microsoft-ace-oledb-12-0-provider已经安装在我的机器上,并且对其他应用程序开发工作正常。与我遇到问题的应用程序不同之处在于旧应用程序正在运行“本地IIS”,而具有错误的应用程序正在“IIS Express”上运行(从Visual Studio运行)。所以我做的是-右键单击项目名称。转到属性。在右侧转到Web选项卡。在服务器下选择Local IIS并单击Create Virtual Directory按钮。再次运行应用程序,它就可以工作了。

1

您可以在任何平台上运行它,不仅限于“x86”,而且还可以作为“Any CPU”和“x64”。请参见下面的完整答案:stackoverflow.com/a/32760211/3637582 - Merav Kochavi
好的,我不认为这对我来说是个问题...所以仍然值得提到,某人的构建目标平台可能是问题的一部分。 - u8it

1

您可以尝试以下步骤:

在SQL Server中, 1.打开一个数据库 2.单击“服务器对象”选项 3.单击“链接服务器” 4.单击“提供程序” 5.右键单击“Microsoft.ACE.OLEDB.12.0” 6.取消选择所有选项并关闭


1
我已经在我的电脑上安装了Microsoft Access Database Engine 2010 Redistributable,但仍然收到Microsoft ACE OLEDB Provider错误。后来我想起我最近升级到Office 2016,所以我应该尝试重新安装Microsoft Access Database Engine 2010 Redistributable。这解决了我的问题。因此,如果您已经升级到不同版本的MS Office或甚至修复/重新安装了MS Office,请在寻找其他解决方法之前尝试重新安装Microsoft Access Database Engine 2010 Redistributable。祝好运!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接