web-dev-qa-db-fra.com

Le fournisseur 'Microsoft.ACE.OLEDB.12.0' n'est pas enregistré sur la machine locale (serveur)

Je sais que cette question a une douzaine de réponses et de messages, mais rien ne fonctionne pour moi. 

J'ai mon application MVC 5 et je la déploie sur IIS 7.5 sur mon serveur. L'application fonctionne parfaitement, tout fonctionne jusqu'à ce que je passe à l'action, où j'utilise ACE.OLEDB.

Je reçois cette erreur:

[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

J'ai trouvé quelques réponses sur le Web et j'ai fait ce qui suit:

  1. Installation Redistribuable du moteur de base de données Microsoft Access 2010
  2. Installation Pilote Office System 2007: Composants de connectivité de données

J'ai essayé ceci:

  1. Dans l'explorateur de solutions, cliquez avec le bouton droit sur votre projet, puis cliquez sur Propriétés.
  2. Cliquez sur l'onglet Construire
  3. Changer la cible de la plateforme de: Tout processeur à x86 | Tout processeur à x64
  4. Reconstruisez votre solution

Aucune suggestion?

13
Bryuk

C'est probablement un problème de bitness, mais il ne s'agit pas du bitness dans vos propriétés de construction.

Le pilote ACE est disponible en deux versions: x86 et x64.

  1. Vous ne pouvez en installer qu'un seul.
  2. Si vous installez la version x86, seules les applications x86 peuvent l’utiliser. Si vous installez la version x64, seules les applications x64 peuvent l’utiliser. (Oui, c'est stupide.)

Désormais, que votre application Web s'exécute en mode x86 (32 bits) ou x64 est non déterminé par vos paramètres de construction mais par les paramètres de votre pool d’applications : sélectionnez le pool d’applications dans le Gestionnaire IIS, accédez à Propriétés/Paramètres avancés et vérifiez le paramétrage de Activer les applications 32 bits . Si cette option est définie, votre application s'exécute en mode x86, sinon en mode x64. Assurez-vous qu’il s’agit du même mode que celui pour lequel vous avez installé le pilote ACE.

(Bien sûr, la réponse de Steve concernant l'utilisation du nom de pilote correct s'applique également.)

28
Heinzi

Il n'y a pas 

Microsoft.ACE.OLEDB.4.0

Il y a 

Microsoft.ACE.OLEDB.12.0 

ou 

Microsoft.JET.OLEDB.4.0

Bien sûr, les règles habituelles sur 32bit et 64bit doivent être appliquées avec soin

Voir cette réponse

Vous devez donc installer le moteur de base de données Access redistribuable que vous pouvez télécharger à partir d’ici . Toutefois, veillez à télécharger la version correcte (32 bits ou 64 bits) en fonction de la plate-forme cible choisie pour créer votre application. (AnyCPU, x64, x86).

Bien sûr, si Office est installé sur votre serveur, vous avez déjà installé l’ACE, mais il se peut que ce soit pour une plate-forme différente et que votre application ait besoin d’être compilée pour la même chose. (Exemple, Office 32bit, puis ACE 32bit et vous devez compiler votre application pour x86)

9
Steve

il s'agit probablement d'un problème X86 ou X64

vous devez l'installer:

Pilote Office System 2007: Composants de connectivité de données. ( http://www.Microsoft.com/en-us/download/details.aspx?id=23734 )

alors assurez-vous:

BUILD -> Configuration Manager -> Plateforme de solution active -> x64 http://www.codeproject.com/Tips/417397/OLEDB-Provider-is-Not-Registered-on-the-Local-Mach

3
JC Lizard

Vous devez simplement changer le gestionnaire de configuration.

Pas:

  1. Cliquez avec le bouton droit sur le nom de votre projet dans l'Explorateur de solutions.
  2. Choisissez le gestionnaire de configuration.
  3. Une fois la boîte de dialogue ouverte, modifiez la plateforme de solution active en tant que nouvelle ....
  4. Encore une fois la boîte de dialogue ouverte, choisissez x86 CPU.
  5. Cliquez sur OK et fermez Configuration Manager.
  6. Enfin, lancez votre projet.
1
Bhakti K Mishra