“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了您的项目 ,那么为了解决您的问题,您应该在机器上安装以下软件包:
-
为了使用“Microsoft.ACE.OLEDB.12.0”提供程序,您必须首先安装Microsoft Access数据库引擎2010年可再发行组件 ,此安装位于: http : //www.microsoft.com/download/en/details.aspx ?id = 13255 。
安装完成后,尝试运行你的应用程序,如果这样可以很好的解决问题,如果没有,继续步骤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数据库引擎。
- 首先在本地下载文件您可以在此处下载安装: http : //www.microsoft.com/en-us/download/details.aspx?id=13255
- 使用带“/ 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”。
步骤如下:
-
右键单击Solution Explorer中的解决scheme文件:
- 点击configurationpipe理器。
-
点击主动平台下拉菜单,如果x86已经存在,那么select它,否则点击新build。
-
从新平台下拉列表中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运行”)。 所以我所做的是 –
- 右键单击项目名称。
- 去属性
- 转到右侧的Web选项卡。
- 在服务器下select本地IIS,然后单击创build虚拟目录button。
- 再次运行应用程序,它工作。
我能够通过按照本文中的步骤来解决此问题: 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和工作