我有一个带有两个项目的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'   提供者未注册   本地机器。<!> quot;}

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

有帮助吗?

解决方案

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

其他提示

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

1)确保安装了2007数据库引擎,可以在以下位置下载:

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


解决方案:

就是这样!感谢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配置。

它看起来像一长串的步骤,但一旦你知道这些东西在哪里就容易多了。只有Configuration Manager的人可能会觉得这很有用。一旦你知道了Tools -> Options,下次就会更加直观。

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

我还建议使用<=>删除Any CPU平台。如果您曾经依赖于32位本机DLL(甚至是间接依赖项),那么您真的不希望这样。

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


我以为我会参与其中,因为我在面对一个稍微不同的问题背景时发现了这个问题,并认为它可能有助于未来其他受折磨的灵魂:

我在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-现在可以运行32位和64位应用程序在同一服务器上.aspx

在IIS 6.0中它的工作方式略有不同(您无法在应用程序池级别设置Enable32bitAppOnWin64) 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 Driver:Data Connectivity Components。

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

在类似的堆栈交换线程上查看我的帖子 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

我在完全更新的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 Driver Beta:数据连接组件无法解决最初的问题,即使使用<! > QUOT;!Microsoft.ACE.OLEDB.12.0 <> QUOT;作为提供者而不是<!>“; 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提供商的问题?如果其他人都没有工作,有没有人找到解决方案?

我假设如果您运行的是具有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 使用带有'/ passive'标志的命令提示符进行安装。在里面 命令提示符运行以下命令: 'AccessDatabaseEngine_x64.exe / passive'
  4. 注意:订单似乎很重要 - 所以如果你已经安装了任何东西,请卸载并按照上述步骤操作。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top