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


68

我有一个带有两个项目的Visual Studio 2008解决方案(一个Word-Template项目和一个用于测试的VB.Net控制台应用程序)。这两个项目都引用一个数据库项目,该项目打开了与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 Template项目中调用此函数时,一切正常。没有错误。但是,当我从控制台应用程序运行它时,它将引发以下异常

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

这两个项目具有相同的参考,并且控制台应用程序在我第一次编写它(前一阵子)时就可以工作,但是现在它已经停止工作。我一定想念什么,但我不知道。有任何想法吗?


林也面临着同样的问题。你们能帮我吗?在哪里可以找到2007 Access数据库提供程序的安装程序?

Answers:


43

我有一个使用Visual Studio 2008的Visual Basic程序,该程序使用Access 2007数据库,并且收到相同的错误。我发现一些线程建议将高级编译配置更改为程序属性中的x86(如果您正在运行64位系统)。从那时起,到目前为止我的程序没有任何问题。


4
但是对于asp.net应用程序来说,这是由IIS确定的,因此请查看本文: support.microsoft.com/kb/894435/zh-cn
devzero 2009年

6
我在ASP.NET应用程序上遇到相同的问题-在本地运行代码,但是在服务器上失败。需要在此处安装2007 Office system驱动程序:数据连接组件:microsoft.com/downloads/en/…,然后必须启用网站的辅助进程(应用程序池)以允许32位应用程序。
基思2010年

3
这对不能使用x86的人没有帮助。有一个适用于64位的ACE版本:goo.gl/Cxsf1,但是您必须卸载Office 2003,因为那里存在兼容性问题。
约旦

我安装了64位操作系统和Office 2010 x86版本,并安装了访问数据库引擎重新分发程序,我正在尝试修复Internet中所有可能解决方案的错误。我也有另一个项目,同一提供者在其中工作。
不完整的

53

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

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

2)打开IIS7管理器,然后打开“应用程序池”区域。在右侧栏中,您将看到一个选项,其中显示“设置应用程序池默认设置”。单击它,将弹出一个带有选项的窗口。

3)向下的第二个字段默认表示“启用32位应用程序”设置为FALSE。只需单击显示为“ false”的位置即可将其更改为“ true”。

4)重新启动您的应用程序池(您可以先按RECYCLE而不是STOP然后再单击START,这也将起作用)。

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


这对我有用... Visual Studio 2010 Premium,W​​indows Server 2008 R2,IIS 7,在分层Web应用程序中使用WCF。
龙大

谢谢-正是我所需要的!
安迪

1
请记住,这意味着带有该标志的应用程序池将完全以32位模式运行。
约翰·韦登

Microsoft链接已死。如果有人在寻找到2007数据库引擎的替换链接。它托管在download.com的此处:download.cnet.com/… 是合法的。遗留软件维护的乐趣。
misterManSam

7

您是否正在运行64位系统,数据库运行32位,而控制台运行64位?没有运行64位的MS Access驱动程序,其报告的错误与您报告的错误相同。


是的,我正在运行64位XP,这正是问题所在。将“高级编译选项”中的目标CPU切换到x86位应用程序,现在所有工作。谢谢
Azim

5

解:

而已!感谢Arjun Paudel提供的链接。这是在XNA Creator's Club Online上找到的解决方案。是斯蒂芬·斯蒂尔查克(Stephen Styrchak)创作的。

以下错误提示我相信您正在为64位编译:

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

我没有速成版,但以下步骤在2008 Express中有效吗?

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

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


在中VC# Express,缺少此属性,但是如果知道在哪里查看,仍然可以创建x86配置。

它看起来像一长串的步骤,但是一旦您知道这些东西在哪里,就会容易得多。仅拥有VC# Express者可能会发现这很有用。一旦您了解Configuration Manager,下一次它将更加直观。

1.在VC#Express 2005中,转到Tools -> Options
2.在“选项”对话框的左下角,选中显示为的框"Show all settings"
3.在左侧的树视图中,选择"Projects and Solutions"
4.在右侧的选项中,选中显示"Show advanced build configuraions."
5.单击的框OK
6.转到Build -> Configuration Manager...。
7.在项目旁边的“平台”列中,单击组合框并选择"<New...>"
8.在中"New platform" setting, choose "x86"
9.单击OK
10.单击Close
在那里,现在您有了x86配置!非常简单!:-)

我也建议使用Configuration Manager删除Any CPU平台。如果您曾经对32位本机DLL(甚至是间接依赖项)进行依赖,那么您真的不希望这样做。

史蒂芬·斯蒂尔查克| XNA Game Studio开发人员 http://forums.xna.com/forums/p/4377/22601.aspx#22601



感谢您提供有关更改编译器目标(x86或64位)的附加信息和详细说明。
Azim

3

我以为自己会插话,因为当我面对一个稍微不同的问题背景时发现了这个问题,并认为将来可能会帮助其他遭受折磨的人:

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

由于IIS控制着进程的位数,因此我的解决方案是将Enable32bitAppOnWin64设置设置为true:http : //blogs.msdn.com/vijaysk/archive/2009/03/06/iis-7-tip-您现在可以在同一server.aspx上运行32位和64位应用程序

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


2

我有同样的问题。我尝试在Windows 7 64位上安装Office 2010 64位,然后安装2007 Office System驱动程序:数据连接组件。

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


2

在类似的Stack Exchange线程上查看我的帖子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

1

我在完全更新的Windows Vista Family 64位(带有仅编译为32位的.NET应用程序)上遇到了相同的错误-该程序安装在64位计算机上的programx86文件夹中。即使安装了2007访问数据库提供程序,安装了SP2或没有安装SP2,安装了IIS并为32位应用程序支持设置了应用程序池,它仍会失败并显示此错误消息。

我将我的应用程序切换到ACE OLE DB.12.0,因为JET4.0在64位计算机上发生了故障-并没有更好的效果:-/我发现的最有希望的线程是:

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

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

我的下一个尝试将是跟随这篇文章:

该问题是由于在服务器上注册的OLEDB32.DLL和OLEDB32r.DLL的风格不正确造成的。如果注册了64位版本,则需要取消注册,然后注册32位版本。要解决此问题,请注销位于%Program Files%/ Common Files / System / OLE DB中的版本。然后在同一路径下但在%Program Files(x86)%目录中注册版本。

其他人是否对64位计算机上的JET4.0和OLEDB ACE提供程序有太多麻烦?如果没有其他人可以工作,有没有人找到解决方案?


这里有一些有用的信息,但是正如您现在所知道的,这种书写方式不是stackexchange的首选。如果您进行了清理(如果您还记得的话,还可能更新了对您有用的内容),那么这将增加问题,特别是因为当前对12.0之后的版本(以及是否应使用)的引用很少网络。或者,至少,我希望对此进行更新。
CWilson

1

我假设如果您正在运行具有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/zh-cn/download/details.aspx?id= 13255使用带有'/ passive'标志的命令提示符进行安装。在命令提示符下,运行以下命令:'AccessDatabaseEngine_x64.exe / passive'

注意:顺序似乎很重要-因此,如果您已经安装了任何东西,请卸载并按照上述步骤操作。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.