Der Microsoft.ACE.OLEDB.12.0-Anbieter ist nicht registriert

68

Ich habe eine Visual Studio 2008-Lösung mit zwei Projekten (ein Word-Template-Projekt und eine VB.Net-Konsolenanwendung zum Testen). Beide Projekte verweisen auf ein Datenbankprojekt, das eine Verbindung zu einer MS-Access 2007-Datenbankdatei herstellt, und verweisen auf System.Data.OleDb. Im Datenbankprojekt habe ich eine Funktion, die eine Datentabelle wie folgt abruft

 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

Wenn ich diese Funktion aus meinem Word 2007-Vorlagenprojekt aufrufe, funktioniert alles einwandfrei. keine Fehler. Wenn ich es jedoch über die Konsolenanwendung ausführe, wird die folgende Ausnahme ausgelöst

ex = {"Der Anbieter 'Microsoft.ACE.OLEDB.12.0' ist nicht auf dem lokalen Computer registriert."}

Beide Projekte haben dieselbe Referenz und die Konsolenanwendung hat funktioniert, als ich sie zum ersten Mal geschrieben habe (vor einiger Zeit), aber jetzt funktioniert sie nicht mehr. Ich muss etwas vermissen, aber ich weiß nicht was. Irgendwelche Ideen?

Azim
quelle
Ich stehe auch vor dem gleichen Problem. Könnt ihr mir bitte helfen? Wo finde ich das Installationsprogramm von 2007 Access Database Provider?

Antworten:

43

Ich habe ein Visual Basic-Programm mit Visual Studio 2008, das eine Access 2007-Datenbank verwendet und denselben Fehler erhalten hat. Ich habe einige Threads gefunden, die empfohlen haben, die erweiterte Kompilierungskonfiguration in den Programmeigenschaften auf x86 zu ändern, wenn Sie ein 64-Bit-System ausführen. Bisher hatte ich seitdem keine Probleme mit meinem Programm.

Eric Andres
quelle
4
Für eine asp.net-Anwendung wird dies jedoch vom IIS festgelegt. Lesen Sie daher diesen Artikel: support.microsoft.com/kb/894435/en-us
devzero
6
Ich hatte das gleiche Problem in einer ASP.NET-Anwendung - das lokale Ausführen des Codes funktionierte, schlug jedoch auf dem Server fehl. Erforderlich, um 2007 Office System Driver: Data Connectivity Components hier zu installieren: microsoft.com/downloads/en/… , musste dann den Arbeitsprozess (Anwendungspool) für die Website aktivieren, um 32-Bit-Anwendungen zuzulassen.
Keith
3
Dies hilft Menschen nicht, die x86 nicht verwenden können. Es gibt eine Version von ACE für 64-Bit: goo.gl/Cxsf1 , aber Sie müssen Office 2003 deinstallieren, da dort Kompatibilitätsprobleme auftreten.
Jordanien
Ich habe 64-Bit-Betriebssystem und Office 2010 x86-Version mit installiertem Access DB Engine Redistributor. Ich versuche, den Fehler mit allen möglichen Lösungen im Internet zu beheben. Aber es funktioniert nicht. Ich habe auch ein anderes Projekt, bei dem derselbe Anbieter arbeitet.
unvollständig
53

Wenn Sie sich auf einem 64-Bit-Computer befinden, stellt IIS 7 (standardmäßig) keine 32-Bit-Apps bereit, auf denen das Datenbankmodul ausgeführt wird. Also genau das, was Sie tun:

1) Stellen Sie sicher, dass das 2007-Datenbankmodul installiert ist. Dieses kann unter folgender Adresse heruntergeladen werden: http://www.microsoft.com/downloads/details.aspx?FamilyID=7554F536-8C28-4598-9B72-EF94E038C891&displaylang=de

2) Öffnen Sie den IIS7-Manager und den Bereich Anwendungspools. In der rechten Seitenleiste sehen Sie eine Option mit der Aufschrift "Standardeinstellungen für Anwendungspool festlegen". Klicken Sie darauf, und ein Fenster mit den Optionen wird angezeigt.

3) Das zweite Feld mit der Aufschrift "32-Bit-Anwendungen aktivieren" ist wahrscheinlich standardmäßig auf "FALSE" gesetzt. Klicken Sie einfach auf die Stelle, an der "falsch" steht, um sie in "wahr" zu ändern.

4) Starten Sie Ihren App-Pool neu (Sie können dies tun, indem Sie RECYCLE anstelle von STOP und dann START drücken, was ebenfalls funktioniert).

5) fertig, und Ihre Fehlermeldung verschwindet.

Matt
quelle
Dies funktionierte für mich ... Visual Studio 2010 Premium, Windows Server 2008 R2, IIS 7, mit WCF in einer gestuften Webanwendung.
Longda
Danke - genau das, was ich brauchte!
Andy
1
Beachten Sie, dass der App-Pool mit diesem Flag vollständig im 32-Bit-Modus ausgeführt wird.
John Weldon
Microsoft Link ist tot. Wenn jemand nach einem Ersatzlink zum 2007-Datenbankmodul sucht. Es wird hier auf download.com gehostet: download.cnet.com/… Es ist echt. Die Freuden der alten Softwarewartung.
misterManSam
7

Führen Sie ein 64-Bit-System mit einer 32-Bit-Datenbank, aber einer 64-Bit-Konsole aus? Es gibt keine MS Access-Treiber, die 64-Bit ausführen und einen Fehler melden würden, der mit dem von Ihnen gemeldeten identisch ist.

Joel Lucsy
quelle
Ja, ich verwende 64-Bit-XP und genau das war das Problem. Die Ziel-CPU in den erweiterten Kompilierungsoptionen wurde auf eine x86-Bit-Anwendung umgestellt, und jetzt funktioniert alles. Danke
Azim
5

Lösung:

Das ist es! Danke Arjun Paudel für den Link. Hier ist die Lösung, wie sie im XNA Creator's Club Online zu finden ist. Es ist von Stephen Styrchak.

Der folgende Fehler lässt vermuten, dass Sie für 64-Bit kompilieren:

Der Anbieter 'Microsoft .ACE.OELDB.12.0' ist nicht auf dem lokalen Computer registriert

Ich habe keine Express Edition, aber sind die folgenden Schritte in Express 2008 gültig?

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


Im VC# Express fehlt diese Eigenschaft, aber Sie können trotzdem eine x86-Konfiguration erstellen, wenn Sie wissen, wo Sie suchen müssen.

Es sieht aus wie eine lange Liste von Schritten, aber sobald Sie wissen, wo diese Dinge sind, ist es viel einfacher. Jeder, der nur hat, VC# Expresswird dies wahrscheinlich nützlich finden. Sobald Sie wissen Configuration Manager, wird es beim nächsten Mal viel intuitiver sein.

1. Gehen Sie in VC # Express 2005 zu Tools -> Options.
2. Aktivieren Sie in der unteren linken Ecke des Dialogfelds Optionen das Kontrollkästchen , "Show all settings".
3.Wählen Sie in der Baumansicht auf der linken Seite "Projects and Solutions".
4. "Show advanced build configuraions."
Aktivieren Sie in den Optionen auf der rechten Seite das Kontrollkästchen 5.Klicken Sie OK.
6.Gehen Sie zu Build -> Configuration Manager... 7.Klicken Sie in
der Spalte Plattform neben Ihrem Projekt auf das Kombinationsfeld und wählen Sie "<New...>".
8.In der "New platform" setting, choose "x86".
9.Klicken Sie OK.
10.Klicken Sie Close.
Dort haben Sie jetzt eine x86-Konfiguration! Einfach wie Torte! :-)

Ich empfehle auch Configuration Manager, die Any CPU-Plattform zu löschen. Das wollen Sie wirklich nicht, wenn Sie jemals Abhängigkeiten von nativen 32-Bit-DLLs haben (sogar indirekte Abhängigkeiten).

Stephen Styrchak | XNA Game Studio-Entwickler http://forums.xna.com/forums/p/4377/22601.aspx#22601


Pescadore
quelle
Vielen Dank für die zusätzlichen Informationen und die ausführliche Erklärung zum Ändern des Compiler-Ziels (x86 oder 64bit).
Azim
3

Ich dachte, ich würde mich einschalten, weil ich diese Frage vor einem etwas anderen Kontext des Problems fand und dachte, sie könnte in Zukunft anderen gequälten Seelen helfen:

Ich hatte eine ASP.NET-App, die unter IIS 7.0 gehostet wurde und unter Windows Server 2008 64-Bit ausgeführt wurde.

Da IIS die Kontrolle über die Prozessbitness hat, bestand die Lösung in meinem Fall darin, die Einstellung Enable32bitAppOnWin64 auf true zu setzen: http://blogs.msdn.com/vijaysk/archive/2009/03/06/iis-7-tip- 2-Sie-können-jetzt-32-Bit-und-64-Bit-Anwendungen-auf-demselben-Server ausführen.aspx

In IIS 6.0 funktioniert dies etwas anders (Sie können Enable32bitAppOnWin64 nicht auf Anwendungspoolebene festlegen). Http://www.microsoft.com/technet/prodtechnol/WindowsServer2003/Library/IIS/0aafb9a0-1b1c-4a39-ac9a-994adc902485.mspx? mfr = wahr

Veli Gebrev
quelle
2

Ich habe das gleiche Problem. Ich versuche, Office 2010 64-Bit unter Windows 7 64-Bit zu installieren und dann 2007 Office System Driver: Data Connectivity Components zu installieren.

Danach kann Visual Studio 2008 eine Verbindung zu einer MS-Access 2007-Datenbankdatei herstellen.

xdxavier
quelle
2

Siehe meinen Beitrag in einem ähnlichen Stack Exchange-Thread https://stackoverflow.com/a/21455677/1368849

Ich hatte Version 15 installiert, nicht 12, was ich durch Ausführen dieses PowerShell-Codes herausgefunden habe ...

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

... was mir dieses Ergebnis gebracht hat (ich habe der Kürze halber andere Datenquellen entfernt) ...

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

Ich habe den gleichen Fehler auf einer vollständig aktualisierten 64-Bit-Windows Vista-Familie mit einer .NET-Anwendung, die ich nur auf 32 Bit kompiliert habe - das Programm ist auf 64-Bit-Computern im Ordner programx86 installiert. Diese Fehlermeldung schlägt fehl, selbst wenn der 2007-Zugriffsdatenbankanbieter installiert ist, ohne dass SP2 desselben installiert, IIS installiert und der App-Pool für die 32-Bit-App-Unterstützung eingestellt ist. Ja, ich habe jede Lösung überall ausprobiert und immer noch keinen Erfolg.

Ich habe meine App auf ACE OLE DB.12.0 umgestellt, weil JET4.0 auf 64-Bit-Computern fehlgeschlagen ist - und es ist nicht besser: - / Der vielversprechendste Thread, den ich gefunden habe, war folgender:

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

Wenn Sie jedoch versuchen, die 64-Bit-Version "2010 Office System Driver Beta: Datenkonnektivitätskomponenten" zu installieren, werden Sie darauf hingewiesen, dass Sie die 64-Bit-Version nicht installieren können, ohne alle 32-Bit-Office-Anwendungen zu deinstallieren ... und die 32-Bit-Version von 2010 zu installieren Office System Driver Beta: Datenkonnektivitätskomponenten lösen das anfängliche Problem nicht, selbst mit "Microsoft.ACE.OLEDB.12.0" als Anbieter anstelle von "Microsoft.ACE.OLEDB.14.0", das auf dieser Seite (und anderen) empfohlen wird.

Mein nächster Versuch wird sein, diesem Beitrag zu folgen:

Das Problem ist auf die falsche Version von OLEDB32.DLL und OLEDB32r.DLL zurückzuführen, die auf dem Server registriert sind. Wenn die 64-Bit-Versionen registriert sind, müssen sie nicht registriert werden, und stattdessen werden die 32-Bit-Versionen registriert. Um dies zu beheben, heben Sie die Registrierung der Versionen in% Program Files% / Common Files / System / OLE DB auf. Registrieren Sie dann die Versionen unter demselben Pfad, jedoch im Verzeichnis% Program Files (x86)%.

Hat jemand so viele Probleme mit JET4.0- und OLEDB-ACE-Anbietern auf 64-Bit-Computern gehabt? Hat jemand eine Lösung gefunden, wenn keiner der anderen funktioniert?

jazzwhistle
quelle
Hier gibt es nützliche Informationen, aber wie Sie inzwischen wissen, ist dieser Schreibstil nicht der bevorzugte für den Stapelaustausch. Wenn Sie dies bereinigt haben (und möglicherweise aktualisiert haben, was letztendlich für Sie funktioniert hat, wenn Sie sich noch erinnern), würde dies die Frage ergänzen, zumal es derzeit so wenige Verweise auf Versionen nach 12.0 gibt (und ob sie verwendet werden sollten) das Netzwerk. Oder zumindest würde ich mich über das Update freuen.
CWilson
1

Ich gehe davon aus, dass die folgenden Pakete auf dem Computer installiert werden müssen, wenn Sie ein 64-Bit-System mit einer 32-Bit-Datenbank ausführen und versuchen, eine 64-Bit-Konsole auszuführen.

  1. Installieren Sie das Microsoft Access Database Engine 2010 x86 Redistributable. Diese Installation ist verfügbar unter: http://www.microsoft.com/download/en/details.aspx?id=13255 .
  2. Datenkonnektivitätskomponenten von Office 2007: Diese Installation ist verfügbar unter: http://www.microsoft.com/download/en/confirmation.aspx?id=23734 .
  3. Microsoft Access Database Engine 2010 x64 Weiterverteilbar. Sie müssen das Paket lokal herunterladen und mit einem passiven Flag ausführen. Sie können die Installation hier herunterladen: http://www.microsoft.com/en-us/download/details.aspx?id=13255 Installation über die Eingabeaufforderung mit dem Flag '/ passive'. Führen Sie an der Eingabeaufforderung den folgenden Befehl aus: 'AccessDatabaseEngine_x64.exe / passive'

Hinweis: Die Reihenfolge scheint von Bedeutung zu sein. Wenn Sie also bereits etwas installiert haben, deinstallieren Sie es und befolgen Sie die obigen Schritte.

Merav Kochavi
quelle