Microsoft.ACE.OLEDB.12.0提供程序未注册

我有一个Visual Studio 2008解决scheme与两个项目(Word模板项目和VB.Net控制台应用程序进行testing)。 两个项目都引用了一个数据库项目,该项目打开一个到MS-Access 2007数据库文件的连接,并具有对System.Data.OleDb的引用。 在数据库项目中,我有一个函数,如下所示检索数据表

private class AdminDatabase ' stores the connection string which is set in the New() method dim strAdminConnection as string public sub New() ... adminName = dlgopen.FileName conAdminDB = New OleDbConnection conAdminDB.ConnectionString = "Data Source='" + adminName + "';" + _ "Provider=Microsoft.ACE.OLEDB.12.0" ' store the connection string in strAdminConnection strAdminConnection = conAdminDB.ConnectionString.ToString() My.Settings.SetUserOverride("AdminConnectionString", strAdminConnection) ... End Sub ' retrieves data from the database Public Function getDataTable(ByVal sqlStatement As String) As DataTable Dim ds As New DataSet Dim dt As New DataTable Dim da As New OleDbDataAdapter Dim localCon As New OleDbConnection localCon.ConnectionString = strAdminConnection Using localCon Dim command As OleDbCommand = localCon.CreateCommand() command.CommandText = sqlStatement localCon.Open() da.SelectCommand = command da.Fill(dt) getDataTable = dt End Using End Function End Class 

当我从Word 2007模板项目中调用这个函数时,一切正常; 没有错误。 但是,当我从控制台应用程序运行它会引发以下exception

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

这两个项目都有相同的参考,并且控制台应用程序在第一次写(不久前)的时候就工作了,但现在停止了工作。 我一定错过了一些东西,但是我不知道是什么。 有任何想法吗?

我有一个使用Access 2007数据库的Visual Studio 2008的Visual Basic程序,并收到相同的错误。 我发现一些线程build议将高级编译configuration更改为在程序属性中find的x86,如果您正在运行64位系统。 到目前为止,我还没有任何问题,因为我的程序。

基本上,如果您使用的是64位计算机,则IIS 7不会(默认情况下)为数据库引擎运行的32位应用程序提供服务。 所以这里就是你所做的:

1)确保安装了2007数据库引擎,可以从以下url下载: http : //www.microsoft.com/downloads/details.aspx?FamilyID=7554F536-8C28-4598-9B72-EF94E038C891&displaylang=en

2)打开IIS7pipe理器,打开“应用程序池”区域。 在右侧栏中,您将看到一个选项,显示“设置应用程序池默认值”。 点击它,一个窗口会popup选项。

3)第二个领域,说'启用32位应用程序'可能默认设置为FALSE。 只需点击“false”,将其更改为“true”即可。

4)重新启动你的应用程序池(你可以通过点击RECYCLE而不是STOP然后START,这也可以)。

5)完成,你的错误信息将消失。

你运行一个64位的系统与数据库运行32位,但控制台运行64位? 没有MS Access驱动程序运行64位,并会报告与您报告的错误相同的错误。


解:

而已! 感谢Arjun Paudel的链接。 以下是在XNA Creator的Club Online上find的解决scheme。 这是由斯蒂芬·斯特查克。

下面的错误表明我相信你正在编译64位:

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

我没有快递版本,但在2008年快递有效的后续步骤?

http://forums.xna.com/forums/t/4377.aspx#22601

http://social.msdn.microsoft.com/Forums/en-US/vbgeneral/thread/ed374d4f-5677-41cb-bfe0-198e68810805/?prof=required
– Arjun Paudel


VC# Express ,缺less该属性,但是如果知道在哪里查找,仍然可以创buildx86configuration。

它看起来像一长串的步骤,但一旦你知道这些东西是什么,这是更容易。 任何只有VC# Express都会觉得这很有用。 一旦了解了Configuration Manager ,下一次会更加直观。

1.在VC#Express 2005中,转至Tools -> Options
2.在选项对话框的左下angular,选中"Show all settings"的框。
3.在左侧的树形视图中,select"Projects and Solutions"
4.在右侧的选项中,选中"Show advanced build configuraions."
5.点击OK
6.转到Build -> Configuration Manager
7.在项目旁边的“平台”列中,单击combobox并select"<New...>"
8.在"New platform" setting, choose "x86"
9. OK
10.单击Close
在那里,现在你有一个x86configuration! 易如反掌! 🙂

我也推荐使用Configuration Manager来删除Any CPU平台。 如果你曾经依赖于32位本地DLL(甚至间接依赖),你真的不希望这样做。

斯蒂芬Styrchak | XNA Game Studio Developer http://forums.xna.com/forums/p/4377/22601.aspx#22601


我以为自己会join这个问题,因为我在面对这个问题稍微不同的背景时发现了这个问题,并且认为这可能会在未来帮助其他痛苦的灵魂:

我有一个运行在Windows Server 2008 64位上的IIS 7.0托pipe的ASP.NET应用程序。

由于IIS控制进程位,所以我的解决scheme是将Enable32bitAppOnWin64设置为true: http : //blogs.msdn.com/vijaysk/archive/2009/03/06/iis-7-tip- 2,您可任意现已运行32位和64位的应用程序-上的-同server.aspx

它在IIS 6.0中的工作方式稍有不同(您不能在应用程序池级别设置Enable32bitAppOnWin64) http://www.microsoft.com/technet/prodtechnol/WindowsServer2003/Library/IIS/0aafb9a0-1b1c-4a39-ac9a-994adc902485.mspx?; MFR =真

我有同样的问题。 我尝试在Windows 7 64位上安装Office 2010 64位,然后安装2007 Office System Driver:Data Connectivity Components。

之后,Visual Studio 2008可以打开到MS-Access 2007数据库文件的连接。

看到我的post在类似的堆栈交易线程https://stackoverflow.com/a/21455677/1368849

我有版本15,不是12安装,我通过运行此PowerShell代码发现了…

 (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 

我已经在完全更新的Windows Vista家族64位上使用.NET编译为32位的.NET应用程序时出现同样的错误 – 程序安装在64位机器上的programx86文件夹中。 即使安装了2007访问数据库提供程序,也会出现此错误消息,其中/ wiothout安装了相同的SP2,安装了IIS,并为32位应用程序提供了应用程序池支持…是的,我尝试过所有解决scheme,但仍然没有成功。

我把我的应用程序切换到ACE OLE DB.12.0,因为JET4.0在64位机器上失败了,而且没有更好的结果:/我find的最有前途的线程是这样的:

http://ellisweb.net/2010/01/connecting-to-excel-and-access-files-using-net-on-a-64-bit-server/

但是当您尝试安装64位“2010 Office System Driver Beta:数据连接组件”时,它会告诉您无法在不卸载所有32位Office应用程序的情况下安装64位版本…并安装2010版的32位版本Office系统驱动程序testing版:数据连接组件不能解决最初的问题,即使使用“Microsoft.ACE.OLEDB.12.0”作为提供程序,而不是该页面(和其他人)推荐的“Microsoft.ACE.OLEDB.14.0”。

我的下一个尝试将是遵循这个职位:

这个问题是由于在服务器上注册了OLEDB32.DLL和OLEDB32r.DLL的错误。 如果注册了64位版本,则需要注销它们,然后注册32位版本。 要解决此问题,请取消注册位于%Program Files%/ Common Files / System / OLE DB中的版本。 然后在相同的path,但在%Program Files(x86)%目录中注册版本。

在64位机器上,有没有其他人对JET4.0和OLEDB ACE提供者有太多的麻烦? 有没有人find一个解决scheme,如果没有其他人的工作?

我假设如果您正在运行一个32位数据库的64位系统,并试图运行一个64位控制台,下面的软件包需要安装在机器上。

  1. 安装Microsoft Access数据库引擎2010 x86可再发行组件,此安装位于: http : //www.microsoft.com/download/en/details.aspx?id=13255 。
  2. 数据连接组件的Office 2007,此安装位于: http : //www.microsoft.com/download/en/confirmation.aspx?id=23734 。
  3. Microsoft Access数据库引擎2010 x64可再发行组件。 您将需要在本地下载软件包并使用被动标志运行它。 您可以在此处下载安装: http : //www.microsoft.com/en-us/download/details.aspx?id= 13255使用带有“/ passive”标志的命令提示符进行安装。 在命令提示符下运行以下命令:'AccessDatabaseEngine_x64.exe / passive'

注意:顺序似乎很重要 – 所以如果你已经安装了任何东西,卸载并按照上面的步骤。