“Microsoft.ACE.OLEDB.12.0”提供程序在本地机器(服务器)上未注册。

16

我知道这个问题有很多答案和帖子,但对我都没有用。

我有一个MVC 5应用程序,并将其部署到我的服务器上的IIS 7.5。应用程序运行良好,一切正常,直到我访问使用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:\Users\alex.chakhau\Documents\Visual Studio 2013\Projects\QuickbookUploadFromElite3e\QuickbookUploadFromElite3e\Controllers\HomeController.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 Database Engine 2010 Redistributable
  2. 安装2007 Office System Driver: Data Connectivity Components

我已经尝试过执行以下步骤:

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

有什么建议吗?


谢谢大家!你们所有人的答案都是正确的!不幸的是,我只能接受一个,但我已经给每个人点了赞=) - Bryuk
6个回答

32

可能是位数的问题,但与您的构建属性中的位数无关。

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

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

现在,您的Web应用程序运行在x86(32位)模式还是x64模式并不取决于您的构建设置,而是取决于您的应用程序池的设置:在IIS Manager中选择应用程序池,转到“属性/高级设置”并验证启用32位应用程序的设置。 如果设置了它,则您的应用程序以x86模式运行,否则以x64模式运行。 确保它与您安装的ACE驱动程序的模式相同。

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


9
如果我能在我的人生中见到你,我会亲吻你=))) 谢谢!那是我错过的最后一步! - Bryuk
1
我也是。我也遇到了同样的问题,她的答案让我摆脱了痛苦 :) - mgsdew
1
太高兴我在一开始就找到了这个...我相信你为我节省了好几个小时。谢谢! - Ross Brasseaux
我已经安装了ACE OLEDB x86(32位)版本,在将应用程序池设置的“启用32位应用程序”更改为True后,它对我起作用了。如果你不想启用32位模式,请卸载32位OLEDB并安装x-64位的OLEDB。 - Sudhanshu Shekhar

11

没有

Microsoft.ACE.OLEDB.4.0

Microsoft.ACE.OLEDB.12.0 
或者
Microsoft.JET.OLEDB.4.0

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

请参见此答案

因此,您需要安装Access数据库引擎可再发行版,您可以从这里下载。但是,根据选择构建应用程序的目标平台(任何CPU、x64、x86),您应该注意下载正确的版本(32位或64位)。

当然,如果您的服务器已安装Office,则已安装ACE,但可能是针对不同的平台,而您的应用程序需要编译为相同的平台。(例如,Office 32位,则ACE 32位,并且您需要将应用程序编译为x86)


我刚刚改用了Microsoft.ACE.OLEDB.12.0,但是还是出现了相同的错误。 - Bryuk
1
现在,您应该确保已安装ACE引擎,并且ACE引擎应该是与您的应用程序使用的相同平台。附上下载链接。 - Steve
Visual Studio的新版本“自动更新”了我的设置...我只是把版本号改回了4,甚至没有注意到“JET”部分已经改成了“ACE”...这个答案真是救命稻草! - eselk

3

我的服务器运行在 64 位下。 - Bryuk
1
请确保它设置为64位。我认为这是版本问题。 - JC Lizard
我应该重启服务器还是不需要? - Bryuk
1
你可以尝试,但我认为这不会解决问题。这是注册问题。 - JC Lizard
我已经尝试了两种方法...将Active Solution Platform设置为x64也不起作用... =( 应用程序在64位下运行,但仍然出现此错误... - Bryuk
我想不出其他办法了。我会重新安装它。 - JC Lizard

1

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

步骤:

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

1

0

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

我通过更改应用程序池设置来解决这个问题,将应用程序的32位应用程序启用(true)并重新启动应用程序。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接