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

Sha*_*ahu 408 .net c# vb.net excel ole

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

 string connString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\source\\SiteCore65\\Individual-Data.xls;Extended Properties=Excel 8.0;";
Run Code Online (Sandbox Code Playgroud)

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

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

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

Var*_*ant 496

好吧,你需要安装它.您正在寻找:

  • 我下载了这些组件并且它们对我不起作用,我必须从这里下载Microsoft Access数据库引擎2010 Redistributable:http://www.microsoft.com/en-in/download/details.aspx?id = 13255 I我确定那是因为我正在使用MS Office 2013.感谢您指出我正确的方向. (42认同)
  • 在我的情况下,我不得不从"任何CPU"切换到x64以匹配我的架构. (14认同)
  • 我必须在https://www.microsoft.com/en-us/download/confirmation.aspx?id=23734安装访问数据库引擎和2007 Office System驱动程序:数据连接组件才能使其正常工作. (5认同)
  • 我的情况,一切都工作正常,然后突然间它开始得到这个错误.那可能发生什么事呢?没有代码改变. (4认同)
  • 开膛手杰克指的是答案本身提供的解决方案,而不是评论。安装“ 2007 Office System驱动程序:数据连接组件”可立即解决此问题。 (2认同)
  • ِ从此链接下载并安装“Microsoft Access Database Engine 2016” https://www.microsoft.com/en-us/download/details.aspx?id=54920 (2认同)
  • 这第二次帮助了我,这次 64 位版本无法工作,所以我先卸载它并安装 32 位版本并工作! (2认同)

rsb*_*rro 146

可以使用64位版本的"Microsoft Access数据库引擎2010可再发行组件"来使用"Microsoft.ACE.OLEDB.12.0"提供程序:http:
//www.microsoft.com/en-us/下载/ details.aspx?ID = 13255

如果你使用从接受的答案中下载,你将需要为x86构建,正如@ backtestbroker.com所指出的那样.

  • 如果使用VS 2012,还要确保在项目的Properties >> Build >> General配置中取消选中"Prefer 32-bit"复选框. (18认同)
  • 我正在使用VS 2008(不要问),直到我阅读post_erasmus'提示并在我的应用程序的属性>>构建>>常规配置中将'平台目标'设置为x64时,此解决方案才起作用.排序,谢谢! (3认同)
  • 有了这个答案,我还必须将应用程序池上的“启用 32 位应用程序”设置为 False。 (3认同)
  • 这帮助解决了我的问题。我的 VS 2019 应用程序是使用任何 CPU 编译的,从而生成 x64 库。我安装了 32 位版本的 Office 2013,这导致我无法安装 x64 Access DB Engine。安装 x64 版本的 Office 后,我就可以安装 x64 引擎,现在一切正常。DLL 地狱依然存在。 (2认同)

Ber*_*ard 65

取决于应用程序(32/64位)使用您可以安装的连接

摘要:

  • 2007-2016所有办事处都包含提供商"Microsoft.ACE.Oledb.12.0"
  • 根据您的应用程序架构选择适当的运行时引擎(32/64)
  • 使用32和64位shell中的powershell-command检查提供程序:

    (New-Object system.data.oledb.oledbenumerator).GetElements() | select SOURCES_NAME, SOURCES_DESCRIPTION 
    
    Run Code Online (Sandbox Code Playgroud)
  • 您将看到您的系统可以使用哪个提供商

长话故事:可以在http://live.sysinternals.com/strings.exe中找到字符串

例如.在安装了32位驱动程序的64位系统上

strings.exe -u -n 10 "c:\Program Files (x86)\Common Files\microsoft shared\OFFICE12\MSO.DLL" | findstr "ACE.O"
strings.exe -u -n 10 "c:\Program Files (x86)\Common Files\microsoft shared\OFFICE14\MSO.DLL" | findstr "ACE.O"
strings.exe -u -n 10 "c:\Program Files (x86)\Common Files\microsoft shared\OFFICE15\MSO.DLL" | findstr "ACE.O"
Run Code Online (Sandbox Code Playgroud)

即使在即将到来的2016年办公室

c:\Program Files\Microsoft Office\root\VFS\ProgramFilesCommonX64\Microsoft Shared\OFFICE16\MSO.DLL
c:\Program Files\Microsoft Office\root\VFS\ProgramFilesCommonX86\Microsoft Shared\OFFICE16\MSO.DLL
Run Code Online (Sandbox Code Playgroud)

你会找到字符串

  • Microsoft.ACE.OLEDB

  • Microsoft.ACE.Oledb.12.0

Office 2013还带有csi.dll

c:\Program Files (x86)\Common Files\microsoft shared\OFFICE15\Csi.dll
c:\Program Files\Common Files\Microsoft Shared\OFFICE15\Csi.dll
Run Code Online (Sandbox Code Playgroud)

其中包含" Microsoft.ACE.OLEDB.15.0 "

和Office 2016

c:\Program Files\Microsoft Office\root\VFS\ProgramFilesCommonX64\Microsoft Shared\OFFICE16\Csi.dll
c:\Program Files\Microsoft Office\root\VFS\ProgramFilesCommonX86\Microsoft Shared\OFFICE16\Csi.dll
Run Code Online (Sandbox Code Playgroud)

它有" Microsoft.ACE.OLEDB.16.0 "版本

  • 通知安装哪个版本的PowerShell脚本是天才!谢谢@Bernhard (4认同)

Mer*_*avi 39

您需要检查的第一件事是您的应用程序的构建配置.

  • 如果您已在x86平台下构建项目,那么为了解决您的问题,您应该在您的计算机上安装以下软件包:

    1. 要使用"Microsoft.ACE.OLEDB.12.0"提供程序,必须首先 安装Microsoft Access数据库引擎2010 Redistributable ,此安装位于:http: //www.microsoft.com/download/en/details.aspx ?id = 13255.

      安装完成后,尝试运行您的应用程序,如果这样可以解决问题,如果没有,请继续执行第2步.

    2. 下一步是一个无法解释的解决方法,适用于Office 2010,即使它是Office 2007的数据连接组件.我不太确定为什么这样可行,但确实如此,并且已经证明这几乎适用于所有情况.您需要安装2007 Office System驱动程序:数据连接组件,此安装位于:http: //www.microsoft.com/download/en/confirmation.aspx?id = 233734.

      安装完成后,尝试运行您的应用程序,这应该可以解决问题.

  • 如果您尝试运行在x64或AnyCPU平台下构建应用程序,我建议首先验证它是否在x86平台下按预期运行.如果它不在该x86平台下运行,请执行第一部分中的步骤并验证它是否按预期运行.

    我确实读到包括OLEDB数据库驱动程序在内的MS Access驱动程序仅在x86平台下运行,并且在x64或AnyCPU平台下不兼容.但这似乎是不真实的.我验证了我的应用程序在构建x86时运行,然后我使用被动标志安装了Access数据库引擎.

    1. 首先在本地下载文件您可以在此处下载安装:http://www.microsoft.com/en-us/download/details.aspx?id = 13255
    2. 使用带有'/ passive'标志的命令提示符进行安装. 在命令提示符下运行以下命令:'AccessDatabaseEngine_x64.exe/passive'

    完成这两个步骤后,我设法在构建x64或AnyCPU构建配置后运行我的应用程序.这似乎解决了我的问题.

注意:步骤的顺序似乎有所不同,因此请遵循相应的步骤.

  • 我有一个问题,我从32位应用程序切换到64位,它不再运行.您的说明的第二部分完美无缺!即使使用32位Microsoft Office,**/被动**标志也允许安装. (3认同)
  • 因为 2 点我已经修复了。非常感谢。我需要安装这个 http://www.microsoft.com/download/en/confirmation.aspx?id=23734 。 (3认同)
  • 提示:将 AccessDatabaseEngine_x64.exe 解压到一个文件夹,以获取 AceRedist.msi 和 Data.cab 文件。在管理员模式下打开 cmd 提示符并执行 `AceRedist.msi /passive`。 (2认同)
  • 多谢。第一个选项对我有用。我记得卸载 32 位 Office 时遇到了多少麻烦,只有在安装 64 位 Office 后,这个问题才得到了更早的解决。但这个 64 位 Office 组件却发挥了神奇作用。 (2认同)
  • 我们在使用我们支持的旧应用程序时遇到了这个问题。这最终是正确的答案,但让我们陷入了困境,因为我们正在安装 64 位版本,因为我们运行的是 64 位笔记本电脑。但切换到 32 位版本修复了这个问题 (AccessDatabaseEngine.exe)。尽管该应用程序是为 32 位构建的,而我们的操作系统在 64 位上运行,但不是 AccessDatabaseEngine_64.exe。 (2认同)

小智 32

当我在Configuration Manager对话框中将构建从"x86"更改为"Any CPU"时,我在Visual Studio 2010中收到此错误/异常.我理解的这个OLEDB数据库驱动程序仅适用于x86,不兼容64位.将构建配置更改回x86解决了我的问题.

  • OLEDB与x64兼容.它可以在任何平台下运行,不仅仅是x86,还可以作为任何CPU运行.请参阅下面的完整答案:stackoverflow.com/a/32760211/3637582 (5认同)

Sha*_*ica 24

我安装了MS驱动程序,它仍然不适合我.然后我发现这篇博文解决了这个问题.在那里阅读,否则使用这两个图像(从该帖子链接)作为TLDR sumamary:

在此输入图像描述

在此输入图像描述


Axi*_*ili 16

如果你使用的是64位但是在安装AccessDatabaseEngine之后仍然有问题,请看这篇文章,它解决了我的问题.

即您需要安装 AccessDatabaseEngine


Tec*_*pud 15

对于那些仍然受此影响的人.

我一直在收到错误......

OLEDB error "The 'Microsoft.ACE.OLEDB.12.0' provider is not registered on the local machine."
Run Code Online (Sandbox Code Playgroud)

......正如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 
Run Code Online (Sandbox Code Playgroud)

...这给了我这个结果(我为了简洁而删除了其他数据源)......

SOURCES_NAME              SOURCES_DESCRIPTION                                                                       
------------              -------------------                                                                       
Microsoft.ACE.OLEDB.15.0  Microsoft Office 15.0 Access Database Engine OLE DB Provider
Run Code Online (Sandbox Code Playgroud)

如您所见,我有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`";"
Run Code Online (Sandbox Code Playgroud)

修改以选择最新的ACE版本,如果不止一个

希望找到这个的人现在可以查看安装的OLEDB版本并使用适当的版本号.

  • 我找到了答案.我曾要求我们的系统管理员安装MS Access数据库引擎.他已经安装了x86版本.当我再次在PowerShell x86中运行查询时,我看到了ACE.OLEDB. (3认同)

小智 9

您需要根据办公室安装的位数将解决方案平台从"任何CPU"更改为"x86"或"x64".

步骤如下:

  1. 右键单击Solution Explorer中的Solution File: 在此输入图像描述

    1. 单击配置管理器.
    2. 单击Active Platform下拉列表,如果x86已经存在,则选择该项,否则单击New. 在此输入图像描述

    3. 从新平台下拉列表中选择x86或x64: 在此输入图像描述

编译并运行您的应用程序.


小智 8

尽管给出了许多答案,但我所遇到的问题尚未提及。

  • 我的方案: 64位应用程序,Win10-64,Office 2007 32位安装。
  • 从MS下载的32位安装程序AccessDatabaseEngine.exe的安装 报告成功,但未安装,已通过此处上面发布内容之一的Powershell脚本进行了验证。

  • 64位安装程序AccessDatabaseEngine_X64.exe的安装报告了令人震惊的错误消息:

在此处输入图片说明

很简单的解决方案已经被发现这里在使用Autodesk的网站。只需将参数/ passive添加到命令行字符串,如下所示:

AccessDatabaseEngine_X64.exe /被动

安装成功,OleDb驱动程序正常工作。

我使用OleDb处理的Excel文件是xlsx类型,由EPPlus 4.5生成并由Excel 2007修改。

  • 我可以用通常的方式安装 AccessDatabaseEngine_X64.exe,但我使用了被动参数来安装 32 位 equilavent (AccessDataBaseEngine.exe)。然后,我终于可以从 Visual Studio 2019 连接到 Access 数据库。 (4认同)

小智 7

此处提供了 64 位版本的“Microsoft Access Database Engine 2010 Redistributable”,允许您使用“Microsoft.ACE.OLEDB.12.0”提供程序: http: //www.microsoft.com/en-us/下载/details.aspx?id=13255

如果使用 VS 2012 或更高版本,请确保在项目的属性 => 构建 => 常规配置中取消选中“首选 32 位”复选框 在此输入图像描述


小智 6

如果安装的“ AccessDatabaseEngine”仍然无法解决问题,请使用以下解决方案:

您需要将Active Solution Platform从“任何CPU”更改为“ x86”。

OLEDB提供程序未在本地计算机上注册

从CodeProject.com


小智 6

如果要调试Web项目,只需确保IIS Express以32位或64位运行,具体取决于您的项目设置。

工具>选项>项目和解决方案> Web项目

然后从中检查(或取消选中)“使用​​IIS Express的64位版本...”


小智 5

syp_恐龙,

正如您针对“Microsoft.ACE.OLEDB.12.0'提供程序未在本地计算机上注册”错误所建议的那样,对我来说,解决方案是将活动解决方案平台从“任何CPU”更改为“x86”。

当我执行这些步骤、重建解决方案、获取 EXE 并将其放置在网络上时,一切都在 Windows 7 64 位计算机上顺利运行。


小智 5

我可以按照本文中的步骤解决此问题:http : //www.mikesdotnetting.com/article/280/solved-the-microsoft-ace-oledb-12-0-provider-is-not-registered-在本地机器上

对我而言,关键点是:

使用IIS进行调试时,

默认情况下,Visual Studio使用32位版本。您可以在Visual Studio中通过转到工具»选项»项目和解决方案»Web项目»常规来更改此设置,然后选择

“将IIS Express的64位版本用于网站和项目”

在检查了该选项之后,然后将项目的平台目标设置回“ Any CPU”(在故障排除过程中的某个位置将其设置为x86),便能够克服该错误。


小智 5

首先验证您的系统中安装了哪个版本的 microsoft.ace.oledb.12.0。

检查以下路径 C:\Program Files\Common Files\Microsoft Shared\OFFICE14\ACEOLEDB.DLL --64 位已安装

检查以下路径 C:\Program Files (x86)\Common Files\Microsoft Shared\OFFICE14\ACEOLEDB.DLL --x86 位已安装

如果安装了 (x86),则使用配置管理器将解决方案平台更改为 x86,将 x64 更改为 x64。

如果不可用,请使用以下链接安装

https://www.microsoft.com/en-us/download/details.aspx?id=23734


Md *_*iar 5

我遇到了同样的问题。转到解决方案属性并将任何 CPU 更改为 x86,我认为它可以完成这项工作。


Sha*_*tfi 5

做这两个步骤:

  1. 在此菜单中:项目 -> yourproject 属性... -> 构建:取消选中“首选 32 位”
  2. 在 connectionString :在扩展属性之前和之后写cuotes,像这样: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;
Run Code Online (Sandbox Code Playgroud)


Kev*_*vin 5

这些配置于 2020 年 1 月在我的新机器上运行:

(仅限 1 - x64)Windows 10 x64、Office 365 x64、使用 /passive 参数安装的 AccessDatabaseEngine_x64 2016、VStudio 构建设置显式设置为 x64,并使用以下连接字符串:Provider= Microsoft.ACE.OLEDB.16.0; 数据源=D:...\MyDatabase.accdb

(2 - x64 或 x32)Windows 10 x64、Office 365 x64、使用 /passive 参数安装的 AccessDatabaseEngine_x64 2016、使用 /passive 参数安装的 PLUS AccessDatabaseEngine 2010(32 位)、VStudio 构建设置设置为 AnyCPU,并使用以下连接字符串:Provider=微软.ACE.OLEDB.16.0; 数据源=D:...\MyDatabase.accdb

(仅限 3 - x32)Windows 10 x64、Office 365 x32、使用 /passive 参数安装的 AccessDatabaseEngine 2010(32 位)、VStudio 构建设置设置为 x86,并使用以下连接字符串:Provider= Microsoft.ACE.OLEDB.12.0;数据源=D:...\MyDatabase.accdb

失败注释

在连接字符串中使用 ACE.OLEDB.12.0 x64 提供程序失败,仅按照上面 (1) 中的方式安装了 AccessDatabaseEngine_x64 2016。

在 Visual Studio 构建设置中使用 AnyCPU 在 (1) 中失败。需要设置 x64。也许这是因为 AnyCPU 意味着 Vstudio 必须在编译时看到 x32 ACE.OLEDB.nn.0 提供程序。

当 ACE.OLEDB.12.0 2016 x32 /passive 引擎看到 x64 应用程序时,它不会安装。(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。