68

我有一个带有两个项目(一个 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' 提供程序未在本地计算机上注册。"}

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

4

9 回答 9

53

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

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

2)打开IIS7管理器,打开Application Pools区域。在右侧边栏中,您将看到一个选项,上面写着“设置应用程序池默认值”。单击它,将弹出一个带有选项的窗口。

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

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

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

于 2010-04-15T20:11:13.417 回答
43

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

于 2009-01-26T03:45:22.880 回答
7

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

于 2008-10-26T22:19:58.000 回答
5

解决方案:

就是这样!感谢 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
- 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.Click的框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


于 2009-12-12T16:55:44.687 回答
3

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

我有一个托管在 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?出厂=真

于 2010-01-29T12:36:57.557 回答
2

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

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

于 2010-05-14T02:42:00.150 回答
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
于 2014-01-30T11:52:50.090 回答
1

我在完全更新的 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 位办公应用程序,则无法安装 64 位版本...并安装 2010 的 32 位版本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 提供程序时遇到这么多麻烦?如果其他人都不起作用,有没有人找到解决方案?

于 2010-04-26T10:18:07.930 回答
1

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

  1. 安装 Microsoft Access 数据库引擎 2010 x86 Redistributable,此安装位于: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 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'

Note: The order seems to matter - so if you have anything installed already, uninstall and follow the steps above.

于 2016-02-10T15:23:49.600 回答