当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《Microsoft.ACE.OLEDB.12.0提供程序未注册》经验,为你挑选了4个好方法。

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

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



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)完成后,您的错误消息将消失.



2> 小智..:

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


我在ASP.NET应用程序上遇到了同样的问题 - 在本地运行代码,但在服务器上运行失败.需要在此处安装2007 Office System驱动程序:数据连接组件:http://www.microsoft.com/downloads/en/details.aspx?FamilyID = 7554F536-8C28-4598-9B72-EF94E038C891&displaylang = en,然后必须启用用于允许32位应用程序的Web站点的工作进程(应用程序池).
但是对于asp.net应用程序,这是由IIS决定的,所以查看这篇文章:http://support.microsoft.com/kb/894435/en-us
这对无法使用x86的人没有帮助.有一个适用于64位的ACE版本:http://goo.gl/Cxsf1,但您必须卸载Office 2003,因为存在兼容性问题.

3> Joel Lucsy..:

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



4> 小智..:

解:

而已!感谢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.Click "框OK.
6.转到Build -> Configuration Manager...
7.在项目旁边的"平台"列中,单击组合框并选择"".
"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


推荐阅读
Life一切安好
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有