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

我试图从一个button点击事件的Excel文件中获取数据。 我的连接string是:

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

当我点击button时,我得到以下错误:

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

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

那么,你需要安装它。 您正在寻找:

  • 2007 Office System驱动程序:数据连接组件 。

“Microsoft Access数据库引擎2010可再发行版”的64位版本将允许您使用“Microsoft.ACE.OLEDB.12.0”提供程序可在此处获得:
http://www.microsoft.com/en-us/download/details.aspx?id=13255

如果您使用接受的答案进行下载,您将需要为x86构build,正如@ backtestbroker.com所指出的那样。

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

  • 访问2007年enginges(只有32位)
  • Access 2010(32&64位)
  • Access 2013完整运行时(32&64bit!> 200mb)
  • 访问2016运行时

概要:

  • 从2007年至2016年的所有办事处都包含提供商“Microsoft.ACE.Oledb.12.0”
  • 取决于您的应用程序体系结构select适当的运行时引擎(32/64)
  • 32位和64位shell的powershell-command检查你的提供者:

     (New-Object system.data.oledb.oledbenumerator).GetElements() | select SOURCES_NAME, SOURCES_DESCRIPTION 
  • 你会看到你的系统可以使用哪个提供者

长话短说:string可以通过http://live.sysinternals.com/strings.exefind

例如。 在安装了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" 

即使在即将到来的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 

你会findstring

  • 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 

其中包含“ 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 

其中有“ Microsoft.ACE.OLEDB.16.0 ”版本

当我在“configurationpipe理器”对话框中将我的内部版本从“x86”更改为“任何CPU”时,我在Visual Studio 2010中遇到了此错误/exception。 我知道这个OLEDB数据库驱动程序只适用于x86,不兼容64位。 将构buildconfiguration更改回x86解决了我的问题。

你需要检查的第一件事是你的应用程序的构buildconfiguration。

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

    1. 为了使用“Microsoft.ACE.OLEDB.12.0”提供程序,您必须首先安装Microsoft Access数据库引擎2010年可再发行组件 ,此安装位于: http : //www.microsoft.com/download/en/details.aspx ?id = 13255 。

      安装完成后,尝试运行你的应用程序,如果这样可以很好的解决问题,如果没有,继续步骤2。

    2. 下一步是一个无法解释的解决方法,即使它是Office 2007的数据连接组件,也适用于Office 2010。我不太清楚为什么这会起作用,但它确实可行,而且几乎在所有情况下都可以使用。 您需要安装2007年Office系统驱动程序:数据连接组件 ,此安装位于: http : //www.microsoft.com/download/en/confirmation.aspx?id=23734 。

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

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

    我读过包括OLEDB数据库驱动程序的MS Access驱动程序只能在x86平台下工作,在x64或AnyCPU平台下不兼容。 但这似乎是不真实的。 我validation了我的应用程序在构buildx86时正在运行,然后使用被动标志安装了Access数据库引擎。

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

    完成这两个步骤后,我设法在x64或AnyCPU构buildconfiguration中构build后运行我的应用程序。 这似乎解决了我的问题。

注意:步骤的顺序似乎有所不同,所以请按照相应的步骤操作。

如果您使用的是64位,但即使在安装AccessDatabaseEngine后仍然有问题,请参阅此帖 ,它为我解决了这个问题。

即你需要安装这个 AccessDatabaseEngine

对于所有仍然受此影响的人士。

我一直在收到错误…

 OLEDB error "The 'Microsoft.ACE.OLEDB.12.0' provider is not registered on the local machine." 

……如OP,Shailesh Sahu所述。

我有64位Windows 7。

我的问题是在PowerShell脚本中,但是使用连接string,类似于OP的post,所以希望我的发现可以应用到C#,PowerShell和依赖于“Microsoft.ACE.OLEDB”驱动程序的任何其他语言。

我遵循这个MS论坛主题的指示: http : //goo.gl/h73RmI

我首先尝试安装64位版本,然后从此页面安装AccessDatabaseEngine.exe的32位版本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 (十二)

所以,我修改我的连接string为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`";" 

修改为select最新的ACE版本,如果不止一个

希望find这个的人现在可以检查一下OLEDB版本的安装情况,并使用适当的版本号。

我安装了MS驱动程序,但它仍然不适合我。 然后我发现这个博客文章解决了这个问题。 阅读它,否则使用这两个图像(链接从那个职位)作为TLDR sumamary:

在这里输入图像描述

在这里输入图像描述

如果安装的“AccessDatabaseEngine”仍然不起作用,下面是解决办法:

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

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

从CodeProject.com

syp_dino,

我为你提供的“Microsoft.ACE.OLEDB.12.0”提供程序的解决scheme没有在本地机器上注册,“错误是将Active Solution Platform从”任何CPU“改为”x86“。

当我执行这些步骤时,重新构build了解决scheme,抓住了EXE并放置在networking上,一切工作顺利在Windows 7 64位机器上。

如果您正在debuggingWeb项目,请确保IIS Express运行在32位或64位,具体取决于您的项目设置。

工具>选项>项目和解决scheme> Web项目

并从那里检查(或取消选中)“使用​​IIS Express的64位版本…”

您需要根据办公室安装的位数将解决scheme平台从“任何CPU”更改为“x86”或“x64”。

步骤如下:

  1. 右键单击Solution Explorer中的解决scheme文件: 在这里输入图像描述

    1. 点击configurationpipe理器。
    2. 点击主动平台下拉菜单,如果x86已经存在,那么select它,否则点击新build。 在这里输入图像描述

    3. 从新平台下拉列表中selectx86或x64: 在这里输入图像描述

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

只需下载并安装以下Access数据库引擎(X86或X64:根据您的机器configuration),看看神奇:)

https://www.microsoft.com/en-us/download/confirmation.aspx?id=13255

我遵循他人的指示; 安装此修补程序,安装该修补程序以及Microsoft Access数据库引擎2010。

我的问题是我在我的机器上的两个站点使用相同的库(linq2sql); 1作品,1不。

最终我发现我必须在apppool的高级设置中为我的非工作站点“启用32位应用程序”。

现在一切正常。

我们在阅读Excel文件时遇到类似的问题。

问题的历史:

由于内存要求,我们最近将应用程序从32位迁移到了64位。 为此,我们将Windows 7从32位迁移到了64位。 但是我们仍然在我们的机器上安装了32位的办公室。

因为,在导入Excel数据到应用程序时,我们遇到了这个问题。

解,

我下载了64位版本的http://www.microsoft.com/en-us/download/details.aspx?id=13255并安装了参数,;

AccessDatabaseEngine_x64.exe /被动

没有任何代码更改我的问题得到解决。

注意:

在64位的操作系统和64位的办公室,我的function工作正常,没有这个修复。 只有当我们的应用程序在安装有32位Office的64位操作系统上运行64位时,才需要此修复程序。

也可以尝试这些步骤

在SQL Server中,1.打开一个数据库2.在“服务器Obtect”选项中打开3.在“链接服务器”中打开文件4.在“Providers”中打开5.在“Microsoft.ACE.OLEDB.12.0”中打开Clic Rigth 6.取消所有选项并closures

我有同样的问题,但在这种情况下, 微软ace-oledb-12-0-供应商已经安装在我的机器上,并正常工作的其他应用程序开发。

这些应用程序和我之间的问题之间的区别是旧的应用程序运行在“ 本地IIS ”,而有错误的是“ IIS Express (从Visual Studio运行”)。 所以我所做的是 –

  1. 右键单击项目名称。
  2. 去属性
  3. 转到右侧的Web选项卡。
  4. 在服务器下select本地IIS,然后单击创build虚拟目录button。
  5. 再次运行应用程序,它工作。

我能够通过按照本文中的步骤来解决此问题: http : //www.mikesdotnetting.com/article/280/solved-the-microsoft-ace-oledb-12-0-provider-is-not-registered-在最LOCAL-MACHINE

对我来说关键是这样的:

当用IIS进行debugging时,

默认情况下,Visual Studio使用32位版本。 您可以在Visual Studio中通过转到工具»选项»项目和解决scheme»Web项目»常规来select

“使用IIS Express的64位版本进行网站和项目”

检查完这个选项后,将我的项目的平台目标设置回“任何CPU”(我在故障排除过程中将其设置为x86),我能够克服这个错误。

我的机器上已经安装了Microsoft Access数据库引擎2010可再发行组件,但仍然收到Microsoft ACE OLEDB提供程序错误。

然后我回想起我最近升级到了Office 2016,所以,可能是我应该尝试重新安装Microsoft Access数据库引擎2010 Redistributable 。 这解决了我的机器上的问题。

所以,如果你已经升级到不同版本的MS Office,甚至修复/重新安装你的MS Office,然后尝试重新安装Microsoft Access数据库引擎2010可再发行组件之前浪费时间寻找其他修复。 祝你好运!

1.)使用ConnectionStrings.comvalidation您的连接string。

2.)确保您安装了正确的数据库引擎。 这些是帮助我的两个数据库引擎。

Microsoft Access数据库引擎2010可再发行组件

2007 Office System驱动程序:数据连接组件

3.)您的构build目标平台可能是“任何CPU”,可能需要“X86”(属性,构build,平台目标)。

尝试从Excel文件(xlsx)导入数据到使用SSMS 2014的SQL Server数据库时遇到此问题。

2007 Office System Driver:数据连接组件安装为我做了窍门。

如果在尝试从ASP.NET应用程序使用ACE时出现此错误,最可能的原因是您已安装32位版本中的任何一个。 默认情况下,64位操作系统上的IIS将在64位工作进程中运行应用程序。 64位进程无法加载32位DLL。 当对ACE提供者进行调用时,64位进程将尝试查找64位DLL。 如果不存在,则会显示将您带到此处的错误消息。

在这种情况下,你有两个select。 首先,你可以安装2010年的64位版本。 如果安装了2007 32位版本,则只需安装2010 64位版本即可。 如果您安装了2010版的32位版本,则需要卸载它,然后下载并安装64位版本的2010版本。 您不能同时安装2010提供程序的32位和64位版本。 如果在开发计算机上执行安装,则可能还受到现有Office安装的位置限制。

第二个选项是更改IIS中的应用程序池以启用32位应用程序。 如果您使用的是完整版本的IIS,则可以使用pipe理工具来执行此操作(控制面板»pipe理工具»Internet信息服务(IIS)pipe理器)。

欲了解更多请参阅下面的链接

请记住在Web服务器上安装AccessDatabaseEngine

  • 几天来我一直面临同样的问题。 我没有安装64位的OLEDB驱动程序,尝试了32位也可在微软网站。
  • 我试图重新安装办公室64位版本也不知何故,它没有工作。 尝试允许IIS池中的32位应用程序为true。
  • 尝试将项目环境更改为X86,AnyMachine,Mixed。 几乎尝试了所有可以在互联网上find的补丁。 但所有的解决scheme都让我失望。
  • 虽然我终于知道,我们正在下载的供应商是最新的,并没有与它一起工作。
  • 我卸载它,并安装oledb驱动程序14.0.7015.1000 。我没有链接,因为我从公司资源,你可能不得不谷歌,但它的作品。 我来到这个微软下载链接 ,它的工作太…但是它是14.0.6119.5000版本,但它的工作。

从Excel文件导入数据到MS-SQL时收到此错误。 提供者已经安装(64位),这让我感到惊讶,为什么它没有工作。 所以我所做的是find这里使用的导入/导出应用程序,即.EXE。 我发现它在

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

然后我直接运行.exe来执行数据导入。 它的工作!

我在不同的计算机上解决它的方式:

我有一个Windows 7 32位的机器与Visual Studio 2012没有Access数据库,因为我没有办公室2010年。我复制了我在Windows 7 64位机器中有相同的来源。

所以,我将AccessDatabaseEngine安装到这台Windows 7 32位机器上,然后按照上面的build议从别人那里下载,一切正常。

我的Windows 7 64位计算机上已经存在问题,已经包含了Access 2010的Office 2010。我在这台计算机上解决的方法是进入项目,选定的属性,在Platform目标有任何CPU我检查首选32位。 重新编译/构build和Microsoft.ACE.OLEDB.12.0“提供程序未在本地计算机上注册消息已经消失。

//读取.xls文件

 string strConnection = "";<br/> string FileName = Server.MapPath("Student.xls"); strConnection = @"Provider=Microsoft.JET.OLEDB.4.0;Data Source=" + FileName + ";Extended Properties='Excel 8.0; HDR=Yes;IMEX=1;'";<br/> try { OleDbConnection conn1 = new OleDbConnection(strConnection); conn1.Open(); DataTable dt = new DataTable(); dt = conn1.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new Object[] { null, null, null, "TABLE" }); Object sheetName = dt.Rows[0]["TABLE_NAME"]; dt.Clear(); dt.Columns.Clear(); OleDbDataAdapter da = new OleDbDataAdapter("SELECT * FROM [" + sheetName.ToString() + "]", conn1); da.TableMappings.Add("Table", "0"); da.Fill(dt); for (int i = 0; i < dt.Rows.Count; i++) { string ID = dt.Rows[i][0].ToString(); string Name = dt.Rows[i][1].ToString(); string City = dt.Rows[i][2].ToString(); string Marks = dt.Rows[i][3].ToString(); } conn1.Close(); } catch { throw; } //To Read xlsx file use following code string strConnection = ""; <br/> string FileName = Server.MapPath("Student.xlsx"); <br/> strConnection = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + FileName + ";Extended Properties='Excel 12.0 Xml;HDR={1};IMEX=1;'";<br/> try { OleDbConnection conn1 = new OleDbConnection(strConnection); conn1.Open(); DataTable dt = new DataTable(); dt = conn1.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new Object[] { null, null, null, "TABLE" }); Object sheetName = dt.Rows[0]["TABLE_NAME"]; dt.Clear(); dt.Columns.Clear(); OleDbDataAdapter da = new OleDbDataAdapter("SELECT * FROM [" + sheetName.ToString() + "]", conn1); da.TableMappings.Add("Table", "0"); da.Fill(dt); //int idx=0; //int j=0; for (int i = 0; i < dt.Rows.Count; i++) { string ID = dt.Rows[i][0].ToString(); string Name = dt.Rows[i][1].ToString(); string City = dt.Rows[i][2].ToString(); string Marks = dt.Rows[i][3].ToString(); } conn1.Close(); } catch { throw; } 

//现在从“ http://www.microsoft.com/en-us/download/confirmation.aspx?id=23734 ”链接安装AccessDatabaseEngine.exe

它将100%

这取决于你已经安装的办公室,如果你有x64位的办公室,那么你必须编译应用程序作为一个X64允许它运行,所以如果你想要它在X36上运行,那么你必须安装Office x86接受,我试过上述所有的解决scheme,但没有工作,直到当我意识到我有办公室的X64位,所以我build立了应用程序为X64和工作