Поставщик "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:\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

Я нашел пару ответов в Интернете, и я сделал следующее:

Я пробовал это:

  • В проводнике решений щелкните правой кнопкой мыши проект и выберите "Свойства"
  • Перейдите на вкладку "Сборка"
  • Изменить целевую платформу платформы: любой процессор на x86 | Любой процессор до x64
  • Восстановите свое решение.

Любые предложения?

Ответ 1

Вероятно, это проблема с биением, но это не о битте в ваших свойствах сборки.

Драйвер ACE доступен в двух версиях: x86 и x64.

  • Вы можете установить только один из них.
  • Если вы устанавливаете версию x86, ее могут использовать только приложения x86. Если вы установите версию x64, ее смогут использовать только приложения x64. (Да, это глупо.)

Теперь, независимо от того, выполняется ли ваше веб-приложение в режиме x86 (32-разрядный) или x64, ваши настройки сборки, а настройки вашего пула приложений : выберите пул приложений в диспетчере IIS, перейдите в раздел "Свойства/дополнительные параметры" и подтвердите настройку "Включить 32-разрядные приложения". Если он установлен, ваше приложение запускается в режиме x86, иначе в режиме x64. Убедитесь, что это тот же режим, что и тот, в котором установлен драйвер ACE.

(Конечно, ответ Стив об использовании правильного имени драйвера также применяется.)

Ответ 2

Нет

Microsoft.ACE.OLEDB.4.0

Существует

Microsoft.ACE.OLEDB.12.0 

или

Microsoft.JET.OLEDB.4.0

Конечно, обычные правила о 32bit и 64bit следует применять осторожно

См. этот ответ

Итак, вам нужно установить распространяемый механизм доступа к базе данных, который вы можете скачать здесь. Но вы должны быть осторожны, чтобы загрузить правильную версию (32 бит или 64 бит) в зависимости от платформы Target, выбранной для создания вашего приложения. (AnyCPU, x64, x86).

Конечно, если ваш сервер установлен в Office, у вас уже установлен ACE, но он может быть для другой платформы, и ваше приложение необходимо скомпилировать для него. (Пример: Office 32bit, затем ACE 32bit, и вам нужно скомпилировать приложение для x86)

Ответ 3

возможно, это проблема X86 или X64

вам необходимо установить его:

2007 Драйвер системы Office: компоненты подключения к данным. (http://www.microsoft.com/en-us/download/details.aspx?id=23734)

то убедитесь, что:

BUILD → Configuration Manager → Платформа для активных решений → x64 http://www.codeproject.com/Tips/417397/OLEDB-Provider-is-Not-Registered-on-the-Local-Mach

Ответ 4

Вам нужно просто изменить диспетчер конфигурации.

Шаги:

  • Щелкните правой кнопкой мыши имя вашего проекта в обозревателе решений.
  • Выберите диспетчер конфигурации.
  • После открытия диалогового окна измените активную платформу решения как новый....
  • Снова после открытия диалогового окна выберите x86 CPU.
  • Нажмите "ОК" и закройте "Диспетчер конфигурации".
  • Наконец, запустите проект.

Ответ 5

Может показаться, что у вас установлены драйверы ACE, и даже изменение свойств пула приложений приведет к тому, что приложение будет работать.

Но вам может не хватать драйвера подключения для вашей системы

Попробуйте установить его по этой ссылке, у меня это сработало:

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