“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个回答

8

请执行以下两个步骤:

  1. 在菜单中选择: 项目 -> 你的项目属性... -> 构建 : 取消勾选 "prefer 32-Bit"
  2. 在 connectionString 中,为 Extended properties 前后加上引号,就像这样:Extended Properties='Excel 12.0 Xml;HDR=YES'
var fileName = string.Format("{0}", openFileDialog1.FileName);
var connectionString = string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0}; Extended Properties='Excel 12.0 Xml;HDR=YES'", fileName);
var adapter = new OleDbDataAdapter("SELECT * FROM [Sheet1$]", connectionString);
var ds = new DataSet();

adapter.Fill(ds, TableNmae);

DataTable data = ds.Tables[TableNmae];
dg1.DataSource = data;

1
取消勾选“首选32位”对我来说似乎是有效的,同时安装了Microsoft Access Database Engine 2010 Redistributable。 - I.T Delinquent
1
取消勾选“首选32位”对我有用。谢谢。 - adenizc
取消勾选“首选32位”对我也起作用。 - David A Stumpf

7
我按照这篇文章中的步骤解决了问题:http://www.mikesdotnetting.com/article/280/solved-the-microsoft-ace-oledb-12-0-provider-is-not-registered-on-the-local-machine 对于我而言,关键点是:
当使用IIS进行调试时,默认情况下Visual Studio使用32位版本。您可以通过Visual Studio中的Tools » Options » Projects And Solutions » Web Projects » General更改此设置,并选择“Use the 64 bit version of IIS Express for websites and projects”。
在选中该选项后,将我的项目平台目标重新设置为“Any CPU”(在故障排除过程中我曾将其设置为x86),然后我就能够成功克服错误。

1
谢谢,大多数其他答案都是针对32位的,但这可以帮助您向64位迈进。 - illinoistim
非常感谢,这正是我所寻找的。 - Manoj Kalluri

7
如果您正在调试一个Web项目,请确保 IIS Express 运行在32位或64位中,具体取决于您的项目设置。
前往
工具 > 选项 > 项目和解决方案 > Web 项目
从那里检查(或取消检查)“使用64位版本的IIS Express...”

1
哇,尝试了很多小时其他解决方案,只有你的修复方法有效!谢谢。 - Hernaldo Gonzalez

7
64位版本的“Microsoft Access Database Engine 2010 Redistributable”可用于使用“Microsoft.ACE.OLEDB.12.0”提供程序,下载链接在此处: http://www.microsoft.com/en-us/download/details.aspx?id=13255 如果使用VS 2012或更高版本,请确保项目属性=>生成=>常规配置中的“首选32位”复选框未选中。 enter image description here

6
如果安装的“AccessDatabaseEngine”仍然没有帮助,以下是解决方案:
您需要将活动解决方案平台从“任何CPU”更改为“x86”。
来自CodeProject.com的OLEDB提供程序在本地计算机上未注册

您可以在任何平台上运行它,不仅限于“x86”,而且还可以作为“Any CPU”和“x64”。请参见下面的完整答案:stackoverflow.com/a/32760211/3637582 - Merav Kochavi

6
首先,请确认您的系统上安装了哪个版本的microsoft.ace.oledb.12.0。您可以在以下路径中检查:C:\Program Files\Common Files\Microsoft Shared\OFFICE14\ACEOLEDB.DLL,如果是64位系统,则安装的是64位版本;如果是x86 32位系统,则安装的是x86版本。 如果安装的是x86版本,请使用配置管理器将解决方案平台更改为x86;如果安装的是x64版本,请将解决方案平台更改为x64。 如果未安装,则可以使用以下链接进行安装:https://www.microsoft.com/en-us/download/details.aspx?id=23734

5
这些配置在2020年1月适用于我的新机器构建:
(1-x64 only) Windows 10 x64,Office 365 x64,AccessDatabaseEngine_x64 2016安装了/passive参数,VStudio构建设置显式设置为x64,并使用以下连接字符串:Provider=Microsoft.ACE.OLEDB.16.0; Data Source=D:...\MyDatabase.accdb
(2-x64或x32) Windows 10 x64,Office 365 x64,AccessDatabaseEngine_x64 2016已安装/passive参数,另外还安装了AccessDatabaseEngine 2010 (32位)/passive参数,VStudio构建设置为AnyCPU,并使用以下连接字符串:Provider=Microsoft.ACE.OLEDB.16.0; Data Source=D:...\MyDatabase.accdb
(3-x32 only) Windows 10 x64,Office 365 x32,AccessDatabaseEngine 2010 (32位)安装了/passive参数,VStudio构建设置为x86,并使用以下连接字符串:Provider=Microsoft.ACE.OLEDB.12.0; Data Source=D:...\MyDatabase.accdb
失败记录:
仅使用以上(1)中安装的AccessDatabaseEngine_x64 2016,使用连接字符串中的ACE.OLEDB.12.0 x64提供程序会失败。
在(1)中使用Visual Studio构建设置中的AnyCPU会失败。必须设置为x64。可能是因为AnyCPU意味着Vstudio必须在编译时看到一个x32 ACE.OLEDB.nn.0提供程序。
当发现周围有x64应用程序时,ACE.OLEDB.12.0 2016 x32 /passive引擎将无法安装。(ACE.OLEDB.12.0 2010 x32 /passive安装程序可以正常工作。)
结论:
要使用x64构建设置,需要具有2016 x64数据库引擎和ACE.OLEDB.16.0连接字符串提供程序以及显式的x64构建设置才能在2020年1月与Office 365配合使用。使用/passive选项使安装变得容易。感谢发布此提示的人!
要使用AnyCPU,我需要安装ACE.OLEDB.12.0 2010 x32引擎和ACE.OLEDB.16.0 x64引擎。这样Vstudio就可以在"AnyCPU"编译时看到x32和x64引擎。我可以将提供程序连接字符串更改为ACE.OLEDB.12.0以进行x32操作或ACE.OLEDB.16.0以进行x64操作。两者都可以正常工作。
要使用x86构建设置,需要具有2010 x32数据库引擎和ACE.OLEDB.12.0连接字符串提供程序以及显式的x86构建设置才能在2020年1月与Office 365 x32配合使用。

5

我曾经遇到过同样的问题。请前往解决方案属性,将 Any CPU 更改为 x86,我认为这样做就可以了。


5

syp_dino,

你所提出的解决方案是将“Microsoft.ACE.OLEDB.12.0'提供程序未在本地计算机注册”错误中的Active Solution Platform从“Any CPU”更改为“x86”。

当我执行这些步骤、重建解决方案、并将EXE放置在网络上后,所有内容都在Windows 7 64位机器上顺利运行。


你可以在任何平台上运行它,不仅限于x86,也可以作为任何CPU。请参见下面的答案:https://dev59.com/jWw15IYBdhLWcg3wYasx#32760211 - Merav Kochavi

3

如果这不起作用,尝试从“选择数据源”屏幕的下拉列表中选择不同的“Excel版本”。 https://stackoverflow.com/a/56171883/283895 - tgolisch
@Taran 链接不可用。 - evry1falls
1
这看起来像是那个文件,但我无法确认。https://download.cnet.com/2007-Office-System-Driver-Data-Connectivity-Components/3000-10254_4-75452798.html - Taran
在2022年,微软已删除了文件:https://www.microsoft.com/en-us/download/confirmation.aspx?id=23734, 有没有人有2007 Office System Driver: Data Connectivity Components的链接? - Fath Bakri

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