English 中文(简体)
Microsoft.ACE.OLEDB.12.0提供程序未注册。
原标题:
  • 时间:2008-10-26 21:05:00
  •  标签:

我有一个Visual Studio 2008方案,包含两个项目(一个Word模板项目和一个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模板项目中调用此函数时,一切正常;没有错误。但是当我从控制台应用程序运行它时,它会抛出以下异常。

ex = {"The Microsoft.ACE.OLEDB.12.0 provider is not registered on the local machine."}

这两个项目具有相同的参考文献,当我第一次编写控制台应用程序时它是工作的(一段时间以前),但现在它已经停止工作。我一定是遗漏了什么,但我不知道是什么。 有什么建议吗?

最佳回答

我有一个使用Visual Studio 2008的Visual Basic程序,使用的是Access 2007数据库,但出现了相同的错误。我发现一些帖子建议,如果您正在运行64位系统,则将高级编译配置更改为x86,可以在程序属性中找到。到目前为止,我的程序没有出现任何问题。

问题回答

基本上,如果您正在使用64位机器,则IIS 7(默认情况下)不会提供32位应用程序,而数据库引擎正在运行。因此,以下是您要执行的操作:

1) ensure that the 2007 database engine is installed, this can be downloaded at: http://www.microsoft.com/downloads/details.aspx?FamilyID=7554F536-8C28-4598-9B72-EF94E038C891&displaylang=en

2)打开IIS7管理器,并打开应用程序池区域。在右侧边栏中,您将看到一个选项,说“设置应用程序池默认值”。单击它,将弹出一个窗口,其中包含选项。

第二个下面的领域,写着“启用32位应用程序”,默认可能设置为 "false"。只需单击 "false" 更改为 "true" 。

4)重新启动您的应用程序池(您可以通过点击“回收”而不是“停止”再开始来执行此操作,这也可以工作)。

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

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


解决方案:

就是这样了!感谢Arjun Paudel提供的链接。这是在XNA Creator's Club Online上找到的解决方案。作者是Stephen Styrchak。

以下错误提示让我相信你正在编译 64 位代码:

Microsoft .ACE.OELDB.12.0 提供程序未在本地机器上注册。

我没有快捷版,但是在2008快捷版中跟随这些步骤有效吗?

将此翻译成中文:http://forums.xna.com/forums/t/4377.aspx#22601 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中,缺少此属性,但如果您知道在哪里查找,仍然可以创建x86配置。

它看起来像一个长长的步骤清单,但是一旦你知道这些东西在哪里,它就会变得更容易。任何只拥有VC# Express的人可能会发现这很有用。一旦你了解了Configuration Manager,下一次就会更加直观。

1.In VC# Express 2005, go to Tools -> Options.
2.In the bottom-left corner of the Options dialog, check the box that says, "Show all settings".
3.In the tree-view on the left hand side, select "Projects and Solutions".
4.In the options on the right, check the box that says, "Show advanced build configuraions."
5.Click OK.
6.Go to Build -> Configuration Manager...
7.In the Platform column next to your project, click the combobox and select "<New...>".
8.In the "New platform" setting, choose "x86".
9.Click OK.
10.Click Close.
There, now you have an x86 configuration! Easy as pie! :-)

我也建议使用配置管理器来删除Any CPU平台。如果您曾经依赖于32位本机动态链接库(甚至是间接依赖关系),那么您真的不需要它。

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


我觉得我要参与进来,因为我在面对一个略微不同的问题时发现了这个问题,并且认为它可能会帮助未来的其他痛苦的灵魂:

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

Since IIS is in control of the process bitness, the solution in my case was to set the Enable32bitAppOnWin64 setting to true: http://blogs.msdn.com/vijaysk/archive/2009/03/06/iis-7-tip-2-you-can-now-run-32-bit-and-64-bit-applications-on-the-same-server.aspx

It works slightly differently in IIS 6.0 (You cannot set Enable32bitAppOnWin64 at application-pool level) http://www.microsoft.com/technet/prodtechnol/WindowsServer2003/Library/IIS/0aafb9a0-1b1c-4a39-ac9a-994adc902485.mspx?mfr=true

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

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

请查看我在类似 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

我在一台已完全升级的64位Windows Vista Family系统上用一个只编译为32位的.NET应用程序时遇到了相同的错误 - 该程序被安装在64位机器的programx86文件夹中。即使安装了2007访问数据库提供程序,并且安装了相同程序的SP2,安装了IIS并设置了32位应用程序支持的应用程序池,该程序仍会出现此错误消息......是的,我尝试过每一个在各处提供的解决方案,但仍然没有成功。

I switched my app to ACE OLE DB.12.0 because JET4.0 was failing on 64bit machines - and it s no better :-/ The most promising thread I ve found was this:

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

but when you try to install the 64 bit "2010 Office System Driver Beta: Data Connectivity Components" it tells you that you can t install the 64 bit version without uninstalling all 32bit office applications... and installing the 32 bit version of 2010 Office System Driver Beta: Data Connectivity Components doesn t solve the initial problem, even with "Microsoft.ACE.OLEDB.12.0" as provider instead of "Microsoft.ACE.OLEDB.14.0" which that page (and others) recommend.

我的下一步尝试将是遵循这篇帖子:

The issue is due to the wrong flavor of OLEDB32.DLL and OLEDB32r.DLL being registered on the server. If the 64 bit versions are registered, they need to be unregistered, and then the 32 bit versions registered instead. To fix this, unregister the versions located in %Program Files%/Common Files/System/OLE DB. Then register the versions at the same path but in the %Program Files (x86)% directory.

Has anyone else had so much trouble with both JET4.0 and OLEDB ACE providers on 64 bit machines? Has anyone found a solution if none of the others work?

我假设如果你运行的是64位系统,而且数据库是32位,同时要运行64位控制台,那么以下包需要在机器上安装。

  1. Install the Microsoft Access Database Engine 2010 x86 Redistributable, this installation is available at: http://www.microsoft.com/download/en/details.aspx?id=13255 .
  2. Data Connectivity Components of Office 2007, this installation is available at: http://www.microsoft.com/download/en/confirmation.aspx?id=23734 .
  3. Microsoft Access Database Engine 2010 x64 Redistributable. You will need to download the package locally and run it with a passive flag. You can download the installation here: http://www.microsoft.com/en-us/download/details.aspx?id=13255 Installing using the command prompt with the /passive flag. In the command prompt run the following command: AccessDatabaseEngine_x64.exe /passive

注意:顺序很重要 - 因此,如果您已经安装了任何东西,请卸载并按照上面的步骤执行。





相关问题
热门标签