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

时间:2008-10-26 21:05:01

标签: visual-studio ms-access ado.net oledb

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

  

ex = {“'Microsoft.ACE.OLEDB.12.0'   提供者未注册   本地机器。“}

两个项目具有相同的引用,并且控制台应用程序在我第一次编写时(前一段时间)确实有效,但现在它已停止工作。我必须遗漏一些东西,但我不知道是什么。有什么想法吗?

9 个答案:

答案 0 :(得分: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)完成后,您的错误消息将消失。

答案 1 :(得分:42)

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

答案 2 :(得分:7)

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

答案 3 :(得分:5)


解决方案:

就是这样!感谢Arjun Paudel的链接。这是XNA Creator的Club Online上的解决方案。这是Stephen Styrchak。

以下错误表明我相信您正在编译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中,此属性缺失,但如果您知道要查找的位置,仍可以创建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(甚至是间接依赖项),那么您真的不希望这样。

Stephen Styrchak | XNA Game Studio开发人员 http://forums.xna.com/forums/p/4377/22601.aspx#22601


答案 4 :(得分: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-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

答案 5 :(得分:2)

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

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

答案 6 :(得分: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

答案 7 :(得分:1)

我在完全更新的Windows Vista 64位系列上遇到了同样的错误,我只编译了32位的.NET应用程序 - 该程序安装在64位计算机上的programx86文件夹中。即使安装了2007访问数据库提供程序,它也会失败并显示此错误消息,并且/ wiothout安装了相同的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位办公应用程序的情况下无法安装64位版本...并安装32位版本的2010 Office System驱动程序测试版:数据连接组件无法解决最初的问题,即使使用“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提供商的问题?如果其他人都没有工作,有没有人找到解决方案?

答案 8 :(得分: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/en-us/download/details.aspx?id=13255 使用命令提示符安装&#39; / passive&#39;旗。在里面 命令提示符运行以下命令: &#39; AccessDatabaseEngine_x64.exe / passive&#39;
  4. 注意:订单似乎很重要 - 所以如果你已经安装了任何东西,请卸载并按照上述步骤操作。

相关问题