Je sais que cette question comporte douzaine de réponses et de publications, mais rien ne fonctionne pour moi.
J'ai mon application MVC 5 et je la déploie sur IIS 7.5 vers mon server. L'application fonctionne bien, 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(OleDbConnectionSsortingng constr, DataSourceWrapper& datasrcWrapper) +1785474 System.Data.OleDb.OleDbConnectionInternal..ctor(OleDbConnectionSsortingng 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(Ssortingng 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:
J'ai essayé ceci:
Aucune suggestion?
C'est probablement un problème de bitness, mais il ne s'agit pas du bitness dans vos propriétés de Build.
Le pilote ACE est disponible en deux versions: x86 et x64.
Maintenant, si votre application Web s'exécute en mode x86 (32 bits) ou x64 n'est pas déterminée par vos parameters de construction, mais par les parameters de votre pool d'applications : select le pool d'applications dans le Gestionnaire des services Internet, allez dans properties / Paramètres avancés et vérifiez le configuration des applications Enable 32-bit . Si elle est définie, votre application s'exécute en mode x86, sinon en mode x64. Assurez-vous que c'est le même mode que celui dont vous avez installé le pilote ACE.
(Bien sûr, la réponse de Steve concernant l'utilisation du bon nom du conducteur s'applique également.)
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 d'environ 32 bits et 64 bits doivent être appliquées avec précaution
Voir cette réponse
Vous devez donc installer le redissortingbuable du moteur de database Access que vous pouvez download à partir d'ici . Mais vous devriez faire attention à download 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 votre server a installé Office, vous avez déjà installé l'ACE, mais cela pourrait être pour une plate-forme différente et votre application doit être compilée pour la même. (Exemple, Office 32bit puis ACE 32bit et vous devez comstackr votre application pour x86)
Probablement le problème X86 ou X64
vous devez l'installer:
2007 Office System Driver: composants de connectivité de données. ( http://www.microsoft.com/en-us/download/details.aspx?id=23734 )
alors assurez-vous:
BUILD -> Configuration Manager -> Active Solution Platform -> x64 http://www.codeproject.com/Tips/417397/OLEDB-Provider-is-Not-Registered-on-the-Local-Mach
Vous devez simplement modifier le gestionnaire de configuration.
Pas: