web-dev-qa-db-fra.com

Le fournisseur Microsoft.ACE.OLEDB.12.0 n'est pas enregistré

J'ai une solution Visual Studio 2008 avec deux projets (un projet Word-Template et une application console VB.Net pour les tests). Les deux projets font référence à un projet de base de données qui ouvre une connexion à un fichier de base de données MS-Access 2007 et comporte des références à System.Data.OleDb. Dans le projet de base de données, j'ai une fonction qui récupère une table de données comme suit

 private class AdminDatabase
   ' stores the connection string which is set in the New() method
   dim strAdminConnection as string

   public sub New()
   ...
   adminName = dlgopen.FileName
   conAdminDB = New OleDbConnection
   conAdminDB.ConnectionString = "Data Source='" + adminName + "';" + _
       "Provider=Microsoft.ACE.OLEDB.12.0"

   ' store the connection string in strAdminConnection
   strAdminConnection = conAdminDB.ConnectionString.ToString()
   My.Settings.SetUserOverride("AdminConnectionString", strAdminConnection)
   ...
   End Sub

   ' retrieves data from the database
   Public Function getDataTable(ByVal sqlStatement As String) As DataTable
        Dim ds As New DataSet
        Dim dt As New DataTable
        Dim da As New OleDbDataAdapter
        Dim localCon As New OleDbConnection


        localCon.ConnectionString = strAdminConnection

        Using localCon
            Dim command As OleDbCommand = localCon.CreateCommand()
            command.CommandText = sqlStatement
            localCon.Open()
            da.SelectCommand = command
            da.Fill(dt)
            getDataTable = dt
        End Using

    End Function
End Class

Lorsque j'appelle cette fonction à partir de mon projet de modèle Word 2007, tout fonctionne correctement. pas d'erreurs. Mais quand je le lance à partir de l'application console, il lève l'exception suivante

ex = {"Le fournisseur 'Microsoft.ACE.OLEDB.12.0' n'est pas enregistré sur la machine locale."}

Les deux projets ont la même référence et l'application de la console fonctionnait bien lorsque je l'ai écrite pour la première fois (il y a quelque temps), mais elle a maintenant cessé de fonctionner. Je dois manquer quelque chose mais je ne sais pas quoi. Des idées?

67
Azim

J'ai un programme Visual Basic avec Visual Studio 2008 qui utilise une base de données Access 2007 et recevait la même erreur. J'ai trouvé des threads qui conseillaient de changer la configuration de compilation avancée en x86 dans les propriétés du programme si vous utilisez un système 64 bits. Jusqu'ici, je n'ai eu aucun problème avec mon programme depuis.

43
David

Fondamentalement, si vous utilisez une machine 64 bits, IIS 7 ne sert pas (par défaut) des applications 32 bits sur lesquelles le moteur de base de données fonctionne. Voici donc exactement ce que vous faites. :

1) Assurez-vous que le moteur de base de données 2007 est installé. Vous pouvez le télécharger à l'adresse suivante: http://www.Microsoft.com/downloads/details.aspx?FamilyID=7554F536-8C28-4598-9B72-EF94E038C891&displaylang=fr

2) ouvrez le gestionnaire IIS7 et ouvrez la zone Pools d'applications. Dans la barre latérale droite, vous verrez une option intitulée "Définir les paramètres par défaut du pool d'applications". Cliquez dessus et une fenêtre apparaîtra avec les options.

3) le deuxième champ vers le bas, qui indique "Activer les applications 32 bits", est probablement défini sur FALSE par défaut. Cliquez simplement là où il est dit "faux" pour le changer en "vrai".

4) Redémarrez votre pool d'applications (vous pouvez le faire en appuyant sur RECYCLE au lieu de STOP puis de START, ce qui fonctionnera également).

5) terminé, votre message d'erreur disparaîtra.

53
Matt

Utilisez-vous un système 64 bits avec la base de données 32 bits mais la console 64 bits? Il n'y a pas de pilotes MS Access exécutant 64 bits et signalant une erreur identique à celle que vous avez signalée.

7
Joel Lucsy

Solution:

C'est ça! Merci Arjun Paudel pour le lien. Voici la solution trouvée sur Club Online de XNA Creator. C'est par Stephen Styrchak.

L'erreur suivante me suggère de croire que vous compilez pour 64 bits:

Le fournisseur 'Microsoft .ACE.OELDB.12.0' n'est pas enregistré sur la machine locale

Je n'ai pas l'édition express, mais les étapes suivantes sont-elles valides en 2008 express?

http://forums.xna.com/forums/t/4377.aspx#22601

http://social.msdn.Microsoft.com/Forums/en-US/vbgeneral/thread/ed374d4f-5677-41cb-bfe0-198e68810805/?prof=required
- Arjun Paudel


Dans VC# Express, Cette propriété est manquante, mais vous pouvez toujours créer une configuration x86 si vous savez où chercher.

Cela ressemble à une longue liste d'étapes, mais une fois que vous savez où sont ces choses, c'est beaucoup plus facile. Ceux qui ne possèdent que VC# Express Trouveront probablement cela utile. Une fois que vous connaissez Configuration Manager, Ce sera beaucoup plus intuitif la prochaine fois.

1.Dans VC # Express 2005, accédez à Tools -> Options.
2.Dans le coin inférieur gauche de la boîte de dialogue Options, cochez la case indiquant "Show all settings".
3.Dans la vue arborescente à gauche, sélectionnez "Projects and Solutions".
4.Dans les options sur la droite, cochez la case qui dit: "Show advanced build configuraions."
5.Cliquez sur OK.
6.Allez à Build -> Configuration Manager ...
7.Dans la colonne Plate-forme à côté de votre projet, cliquez sur la liste déroulante et sélectionnez "<New...>".
8.Dans le "New platform" setting, choose "x86".
9.Cliquez sur OK.
10.Cliquez sur Close.
Là, vous avez maintenant une configuration x86! C'est de la tarte! :-)

Je recommande également d'utiliser Configuration Manager Pour supprimer la plate-forme Any CPU. Vous ne voulez vraiment pas cela si vous avez déjà des dépendances sur des DLL natives 32 bits (même des dépendances indirectes).

Stephen Styrchak | Développeur XNA Game Studio http://forums.xna.com/forums/p/4377/22601.aspx#22601


5
Pescadore

Je pensais répondre parce que j’avais trouvé cette question lorsque j’étais confronté à un contexte légèrement différent du problème et que j’ai pensé que cela pourrait aider d’autres âmes tourmentées à l’avenir:

J'avais une application ASP.NET hébergée sur IIS 7.0 s'exécutant sur Windows Server 2008 64 bits.

Depuis IIS contrôle le bitness du processus, la solution dans mon cas était de définir le paramètre Enable32bitAppOnWin64 sur true: http://blogs.msdn.com/vijaysk/archive /2009/03/06/iis-7-tip-2-you-can-now-run-32-bit-and-64-bit-applications-on-the-same-server.aspx

Cela fonctionne légèrement différemment dans IIS 6.0 (Vous ne pouvez pas définir Enable32bitAppOnWin64 au niveau du pool d'applications)) http://www.Microsoft.com/technet/prodtechnol/WindowsServer2003/Library/IIS /0aafb9a0-1b1c-4a39-ac9a-994adc902485.mspx?mfr=true

3
Veli Gebrev

Voir mon article sur un fil de discussion Stack Exchange similaire https://stackoverflow.com/a/21455677/1368849

J'avais la version 15, pas la 12, que j'ai découverte en exécutant ce code PowerShell ...

(New-Object system.data.oledb.oledbenumerator).GetElements() | select SOURCES_NAME, SOURCES_DESCRIPTION

... ce qui m'a donné ce résultat (j'ai supprimé d'autres sources de données par souci de brièveté) ...

SOURCES_NAME              SOURCES_DESCRIPTION                                                                       
------------              -------------------                                                                       
Microsoft.ACE.OLEDB.15.0  Microsoft Office 15.0 Access Database Engine OLE DB Provider
2
TechSpud

J'ai le même problème. J'essaie d'installer Office 2010 64 bits sur Windows 7 64 bits, puis 2007, Pilote Office System: Composants de connectivité de données.

après cela, visual studio 2008 peut ouvrir une connexion à un fichier de base de données MS-Access 2007.

2
xdxavier

J'ai la même erreur sur une famille Windows Vista 64 bits entièrement mise à jour avec une application .NET compilée en 32 bits uniquement - le programme est installé dans le dossier programx86 sur des ordinateurs 64 bits. Il échoue avec ce message d'erreur même avec le fournisseur de base de données d'accès 2007 installé, avec/wiothout le SP2 du même installé, IIS installé et le pool d'applications défini pour la prise en charge des applications 32 bits ... oui, j'ai essayé toutes les solutions partout et toujours sans succès.

J'ai basculé mon application vers ACE OLE DB.12.0 car JET4.0 échouait sur les ordinateurs 64 bits - et ce n'est pas mieux: -/Le fil le plus prometteur que j'ai trouvé était le suivant:

http://ellisweb.net/2010/01/connecting-to-Excel-and-access-files-using-net-on-a-64-bit-server/

mais lorsque vous essayez d'installer la version bêta du pilote 2010 Office System 64 bits: Composants de connectivité de données, vous ne pouvez pas installer la version 64 bits sans désinstaller toutes les applications bureautiques 32 bits ... et installer la version 32 bits de 2010. Version bêta du pilote Office System: les composants de connectivité de données ne résolvent pas le problème initial, même avec "Microsoft.ACE.OLEDB.12.0" en tant que fournisseur au lieu de "Microsoft.ACE.OLEDB.14.0" recommandé par cette page (et d'autres).

Ma prochaine tentative sera de suivre ce post:

Le problème est dû à la mauvaise version de OLEDB32.DLL et OLEDB32r.DLL enregistrés sur le serveur. Si les versions 64 bits sont enregistrées, elles doivent être désenregistrées, puis les versions 32 bits enregistrées. Pour résoudre ce problème, annulez l'enregistrement des versions situées dans% Program Files%/Fichiers communs/Système/OLE DB. Enregistrez ensuite les versions sur le même chemin, mais dans le répertoire% Program Files (x86).

Quelqu'un d'autre a-t-il eu tant de problèmes avec les fournisseurs JET4.0 et OLEDB ACE sur des machines 64 bits? Quelqu'un a-t-il trouvé une solution si aucun des autres ne fonctionne?

1
jazzwhistle

Je suppose que si vous exécutez un système 64 bits avec une base de données 32 bits et essayez d’exécuter une console 64 bits, les packages suivants doivent être installés sur la machine.

  1. Installez le moteur de base de données Microsoft Access 2010 x86 redistribuable, cette installation est disponible à l'adresse suivante: http://www.Microsoft.com/download/en/details.aspx?id=13255 .
  2. Composants de connectivité de données d'Office 2007, cette installation est disponible à l'adresse suivante: http://www.Microsoft.com/download/fr/confirmation.aspx?id=23734 .
  3. Microsoft Access Database Engine 2010 x64 redistribuable. Vous devrez télécharger le package localement et l'exécuter avec un indicateur passif. Vous pouvez télécharger l'installation ici: http://www.Microsoft.com/en-us/download/details.aspx?id=13255 Installation à l'aide de la commande Invite avec l'indicateur '/ passif'. Dans la commande Invite, exécutez la commande suivante: 'AccessDatabaseEngine_x64.exe/passive'

Remarque: l'ordre semble avoir une importance. Si vous avez déjà installé quelque chose, désinstallez-le et suivez les étapes ci-dessus.

1
Merav Kochavi