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

Posted

技术标签:

【中文标题】Microsoft.ACE.OLEDB.12.0 提供程序未注册【英文标题】:Microsoft.ACE.OLEDB.12.0 provider is not registered 【发布时间】:2008-10-26 21:05:00 【问题描述】:

我有一个带有两个项目(一个 Word 模板项目和一个用于测试的 VB.Net 控制台应用程序)的 Visual Studio 2008 解决方案。这两个项目都引用了一个数据库项目,该项目打开了与 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 = "'Microsoft.ACE.OLEDB.12.0' 提供者未在 本地机器。”

两个项目具有相同的引用,并且当我第一次编写控制台应用程序时(不久前)它确实可以工作,但现在它已经停止工作。我一定错过了什么,但我不知道是什么。有什么想法吗?

【问题讨论】:

我也面临同样的问题。你们能帮帮我吗?我在哪里可以找到 2007 访问数据库提供程序的安装程序? 见-> ***.com/questions/6649363 【参考方案1】:

基本上,如果您使用的是 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、Windows Server 2008 R2、IIS 7,在分层 Web 应用程序中使用 WCF。 谢谢 - 正是我需要的! 请记住,这意味着应用程序池将使用此标志完全以 32 位模式运行。 微软链接已失效。如果有人正在寻找 2007 数据库引擎的替换链接。它在 download.com 上托管:download.cnet.com/… 这是合法的。遗留软件维护的乐趣。【参考方案2】:

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

【讨论】:

但是对于 asp.net 应用程序,这是由 IIS 决定的,所以请查看这篇文章:support.microsoft.com/kb/894435/en-us 我在 ASP.NET 应用程序上遇到了同样的问题 - 在本地运行代码有效,但在服务器上失败。需要在此处安装 2007 Office System 驱动程序:数据连接组件:microsoft.com/downloads/en/…,然后必须为网站启用工作进程(应用程序池)以允许 32 位应用程序。 这对不能使用 x86 的人没有帮助。有一个 64 位版本的 ACE:goo.gl/Cxsf1,但您必须卸载 Office 2003,因为那里存在兼容性问题。 我有 64 位操作系统和 Office 2010 x86 版本,安装了访问数据库引擎重新分发器,我正在尝试使用互联网上所有可能的解决方案来修复错误..但它不起作用。我还有另一个项目,同样的提供者也在工作。【参考方案3】:

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

【讨论】:

是的,我正在运行 64 位 XP,而这正是问题所在。将高级编译选项中的目标 CPU 切换到 x86 位应用程序,现在一切正常。谢谢【参考方案4】:

解决方案:

就是这样!感谢 Arjun Paudel 提供的链接。这是在 XNA Creator's Club Online 上找到的解决方案。这是斯蒂芬·斯蒂尔查克的作品。

以下错误提示我相信您正在为 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 - 阿琼·波德尔


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 游戏工作室开发者 http://forums.xna.com/forums/p/4377/22601.aspx#22601


【讨论】:

感谢您提供有关更改编译器目标(x86 或 64 位)的附加信息和详细说明。【参考方案5】:

我想我会插话,因为我在面临稍微不同的问题背景时发现了这个问题,并认为它可能会在未来帮助其他受折磨的灵魂:

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

由于 IIS 控制进程位数,因此我的解决方案是将 Enable32bitAppOnWin64 设置为 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

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

【讨论】:

【参考方案6】:

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

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

【讨论】:

【参考方案7】:

在类似的 Stack Exchange 线程 https://***.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

【讨论】:

【参考方案8】:

我在完全更新的 Windows Vista Family 64bit 上遇到了同样的错误,它带有一个我只编译为 32 位的 .NET 应用程序 - 该程序安装在 64 位机器上的 programx86 文件夹中。即使安装了 2007 访问数据库提供程序,安装了/未安装相同的 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 Driver Beta: Data Connectivity Components”时,它会告诉您,如果不卸载所有 32 位办公应用程序...并安装 32 位,您将无法安装 64 位版本2010 Office System Driver 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 之后的版本(以及是否应该使用它们)的引用很少网络。或者,至少,我会很感激这次更新。【参考方案9】:

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

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

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

【讨论】:

以上是关于Microsoft.ACE.OLEDB.12.0 提供程序未注册的主要内容,如果未能解决你的问题,请参考以下文章

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

Microsoft.Jet.OLEDB.4.0 与 Microsoft.ACE.OLEDB.12.0,我应该使用哪个?

Microsoft.ACE.OLEDB.12.0 未在 x86 上注册

Microsoft.ACE.OLEDB.12.0 尚未注册”错误

microsoft.ace.oledb.12.0 提供程序未注册

C#:使用 Microsoft.ACE.OLEDB.12.0 连接到 dbf 文件