"Microsoft.ACE.OLEDB.12.0"提供程序未在本地计算机(服务器)上注册



我知道这个问题有十几个答案和帖子,但对我来说什么都不管用。

我有我的MVC 5应用程序,并将其部署到我的服务器的IIS 7.5。应用程序运行良好,一切正常,直到我转到Action,在那里我使用ACE.OLEDB.

我得到这个错误:

[InvalidOperationException: The 'Microsoft.ACE.OLEDB.12.0' provider is not registered on the local machine.]
System.Data.OleDb.OleDbServicesWrapper.GetDataSource(OleDbConnectionString constr, DataSourceWrapper& datasrcWrapper) +1785474
System.Data.OleDb.OleDbConnectionInternal..ctor(OleDbConnectionString constr, OleDbConnection connection) +1802032
System.Data.OleDb.OleDbConnectionFactory.CreateConnection(DbConnectionOptions options, DbConnectionPoolKey poolKey, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningObject) +100
System.Data.ProviderBase.DbConnectionFactory.CreateNonPooledConnection(DbConnection owningConnection, DbConnectionPoolGroup poolGroup, DbConnectionOptions userOptions) +61
System.Data.ProviderBase.DbConnectionFactory.TryGetConnection(DbConnection owningConnection, TaskCompletionSource`1 retry, DbConnectionOptions userOptions, DbConnectionInternal oldConnection, DbConnectionInternal& connection) +964
System.Data.ProviderBase.DbConnectionInternal.TryOpenConnectionInternal(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions) +6785863
System.Data.ProviderBase.DbConnectionInternal.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory) +27
System.Data.OleDb.OleDbConnection.Open() +47
QuickbookUploadFromElite3e.Controllers.HomeController.Matters(String filePath) in c:Usersalex.chakhauDocumentsVisual Studio 2013ProjectsQuickbookUploadFromElite3eQuickbookUploadFromElite3eControllersHomeController.cs:75
lambda_method(Closure , ControllerBase , Object[] ) +127
System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters) +242
System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters) +39
System.Web.Mvc.Async.AsyncControllerActionInvoker.<BeginInvokeSynchronousActionMethod>b__36(IAsyncResult asyncResult, ActionInvocation innerInvokeState) +12
System.Web.Mvc.Async.WrappedAsyncResult`2.CallEndDelegate(IAsyncResult asyncResult) +139
System.Web.Mvc.Async.AsyncInvocationWithFilters.<InvokeActionMethodFilterAsynchronouslyRecursive>b__3c() +112
System.Web.Mvc.Async.<>c__DisplayClass45.<InvokeActionMethodFilterAsynchronouslyRecursive>b__3e() +452
System.Web.Mvc.Async.<>c__DisplayClass30.<BeginInvokeActionMethodWithFilters>b__2f(IAsyncResult asyncResult) +15
System.Web.Mvc.Async.<>c__DisplayClass28.<BeginInvokeAction>b__19() +37
System.Web.Mvc.Async.<>c__DisplayClass1e.<BeginInvokeAction>b__1b(IAsyncResult asyncResult) +241
System.Web.Mvc.Controller.<BeginExecuteCore>b__1d(IAsyncResult asyncResult, ExecuteCoreState innerState) +29
System.Web.Mvc.Async.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult) +111
System.Web.Mvc.Controller.EndExecuteCore(IAsyncResult asyncResult) +53
System.Web.Mvc.Async.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult) +19
System.Web.Mvc.MvcHandler.<BeginProcessRequest>b__4(IAsyncResult asyncResult, ProcessRequestState innerState) +51
System.Web.Mvc.Async.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult) +111
System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +606
System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +288

我在网上找到了几个答案,我做了以下操作:

  1. 正在安装Microsoft Access数据库引擎2010 Redistributable
  2. 安装2007 Office System驱动程序:数据连接组件

我试过这个:

  1. 在解决方案资源管理器中右键单击项目,然后单击"属性"
  2. 单击"生成"选项卡
  3. 将平台目标从:任意CPU更改为x86 |任意CPU更改成x64
  4. 重新构建解决方案

有什么建议吗?

这可能是比特性问题,但与构建属性中的比特性无关

ACE驱动程序有两个版本:x86和x64。

  1. 您只能安装其中一个
  2. 如果你安装x86版本,只有x86应用程序可以使用它。如果你安装x64版本,只有x64应用程序才能使用它。(是的,这很愚蠢。)

现在,您的web应用程序是在x86(32位)模式下运行还是在x64模式下运行不是由您的生成设置决定的,而是由您的应用程序池的设置决定的:在IIS管理器中选择应用程序池,转到"属性"/"高级设置",然后验证"启用32位应用程序"的设置。如果已设置,则应用程序将在x86模式下运行,否则将在x64模式下运行。确保它与安装ACE驱动程序的模式相同。

(当然,Steve关于使用正确的驱动程序名称的回答也适用。)

没有

Microsoft.ACE.OLEDB.4.0

Microsoft.ACE.OLEDB.12.0 

Microsoft.JET.OLEDB.4.0

当然,关于32位和64位的通常规则应该仔细应用

看到这个答案

因此,您需要安装Access数据库引擎可重新分发文件,可以从这里下载。但您应该小心下载正确的版本(32位或64位),具体取决于构建应用程序所选择的目标平台。(AnyCPU、x64、x86)。

当然,如果你的服务器安装了Office,那么你已经安装了ACE,但它可能适用于不同的平台,你的应用程序需要针对相同的平台进行编译。(例如,Office 32位,然后是ACE 32位,您需要为x86编译应用程序)

可能是X86或X64问题

你需要安装它:

2007 Office System驱动程序:数据连接组件。(http://www.microsoft.com/en-us/download/details.aspx?id=23734)

然后确保:

BUILD->Configuration Manager->活动解决方案平台->x64http://www.codeproject.com/Tips/417397/OLEDB-Provider-is-Not-Registered-on-the-Local-Mach

您只需要更改配置管理器。

步骤:

  1. 在解决方案资源管理器中右键单击您的项目名称
  2. 选择配置管理器
  3. 对话框打开后,将活动解决方案平台更改为新的
  4. 再次打开对话框后,选择x86 CPU
  5. 单击"确定"并关闭Configuration Manager
  6. 最后,运行您的项目

您可能已经安装了ACE驱动程序,甚至更改应用程序池属性也会使应用程序正常工作。

但您可能缺少系统的连接驱动程序

尝试从这个链接安装它,它对我有效:

https://download.cnet.com/2007-Office-System-Driver-Data-Connectivity-Components/3000-10254_4-75452798.html

---在尝试下载Microsoft Access DataEngine和更多之后

我通过更改应用程序的应用程序轮询设置来解决此问题>gt;启用32位应用程序(true)>gt;以及重新启动应用程序。

相关内容

最新更新