579 Stimmen

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

Ich versuche, Daten aus einer Excel-Datei bei einem Klick auf eine Schaltfläche zu erhalten. Meine Verbindungszeichenfolge lautet:

 string connString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\source\\SiteCore65\\Individual-Data.xls;Extended Properties=Excel 8.0;";

Wenn ich auf die Schaltfläche klicke, erhalte ich den folgenden Fehler:

Der Anbieter 'Microsoft.ACE.OLEDB.12.0' ist auf dem lokalen Rechner nicht registriert.

Ich habe keine Ahnung, wie ich das beheben kann. Mein Betriebssystem ist Windows 7.

13 Stimmen

Nur ein tangentiales Kommentar: Die Verwendung von OLEDB zum Lesen einer Excel-Datei ist eine veraltete Technologie, sehr langsam und wie Sie festgestellt haben, erfordert sie die manuelle Installation zusätzlicher Pakete auf Ihrer Zielmaschine. (Zugegeben, die Frage wurde 2011 gestellt.) Verwenden Sie stattdessen ClosedXml (verfügbar auf NuGet), das sofort einsatzbereit ist.

7 Stimmen

@ShaulBehr Es wäre schön gewesen, aber ClosedXml funktioniert nur für .xlsx-Dateien, nicht für .xls.

7 Stimmen

Wenn Sie Daten in SQL Server importieren, können Sie diese Abfrage von SSMS ausführen: execute master.dbo.xp_enum_oledb_providers Es wird Ihnen sagen, welche Anbieter es Ihrer Meinung nach gibt. Es hat mir gesagt, dass ich sowohl Microsoft.ACE.OLEDB.16.0 als auch Microsoft.ACE.OLEDB.12.0 habe, aber als ich versuchte, Daten zu importieren, erhielt ich die gleiche Fehlermeldung 'nicht auf Ihrem lokalen Computer registriert' wie der OP, für beide Excel 16 und Excel 2007 Dateiformate (oledb.16.0 und oledb.12.0 jeweils). Es ergibt Sinn, an diesem Punkt die Verluste zu akzeptieren und auf die Microsoft-Software zu verzichten.

36voto

timodius Punkte 583

Ich habe diesen Fehler / diese Ausnahme in Visual Studio 2010 erhalten, als ich meinen Build im Dialogfeld "Konfigurations-Manager" von "x86" auf "Any CPU" geändert habe. Dieser OLEDB-Datenbanktreiber funktioniert nur in x86 und ist nicht mit 64-Bit kompatibel. Das Zurücksetzen der Build-Konfiguration auf x86 hat das Problem für mich gelöst.

5 Stimmen

Der OLEDB ist mit x64 kompatibel. Es kann unter JEDER Plattform ausgeführt werden, NICHT NUR unter x86, sondern auch unter Any CPU. Die vollständige Antwort finden Sie unten: stackoverflow.com/a/32760211/3637582

0 Stimmen

Beim Debuggen der Anwendung in Visual Studio hilft es tatsächlich, in der Konfigurations-Manager x86 anstelle von AnyCPU/x64 zu wählen.

22voto

josh Punkte 642

Auch wenn viele Antworten gegeben wurden, wurde das Problem, auf das ich gestoßen bin, noch nicht erwähnt.

  • Mein Szenario: 64-Bit-Anwendung, Win10-64, Office 2007 32-Bit installiert.

  • Die Installation des 32-Bit-Installationsprogramms AccessDatabaseEngine.exe, das von MS heruntergeladen wurde, meldet Erfolg, ist aber NICHT installiert, wie mit dem Powershell-Skript eines der vorherigen Beiträge hier überprüft wurde.

  • Die Installation des 64-Bit-Installationsprogramms AccessDatabaseEngine_X64.exe meldete eine schockierende Fehlermeldung:

Geben Sie hier eine Bildbeschreibung ein

Die sehr einfache Lösung wurde hier auf einer Autodesk-Website gefunden. Fügen Sie einfach den Parameter /passive zum Befehlszeilenstring hinzu, so wie hier:

AccessDatabaseEngine_X64.exe /passive

Installation erfolgreich, der OleDb-Treiber funktionierte.

Die Excel-Dateien, die ich mit OleDb verarbeite, sind vom Typ xlsx, erstellt mit EPPlus 4.5 und bearbeitet mit Excel 2007.

5 Stimmen

Ich konnte AccessDatabaseEngine_X64.exe auf übliche Weise installieren, aber ich habe den passiven Parameter verwendet, um das 32-Bit-Äquivalent (AccessDataBaseEngine.exe) zu installieren. Dann konnte ich schließlich eine Verbindung zur Access-Datenbank von Visual Studio 2019 herstellen.

1 Stimmen

Dies funktioniert für SQL Server Management Studio v18.8

1 Stimmen

Dies funktioniert auch für SSIS-Pakete, die Excel in VS 2019 importieren. Wie @VolkanOzcan habe ich auch X64 ohne Probleme installiert, musste jedoch den passiven Parameter an AccessDatabaseEngine.exe übergeben (muss die 32-Bit-Version sein). Ich vermute, dass derjenige, den Sie als Zweites installieren, wahrscheinlich den Parameter benötigt.

17voto

TechSpud Punkte 3089

Für alle, die hier noch betroffen sind.

Ich habe den Fehler erhalten...

OLEDB-Fehler "Der Anbieter 'Microsoft.ACE.OLEDB.12.0' ist auf dem lokalen Rechner nicht registriert."

...wie vom OP, Shailesh Sahu, beschrieben.

Ich habe 64-Bit Windows 7.

Mein Problem liegt in PowerShell-Skripten, verwendet aber eine Verbindungszeichenfolge, ähnlich wie im Beitrag des OP, sodass meine Erkenntnisse hoffentlich auf C#, PowerShell und jede andere Sprache angewendet werden können, die auf den "Microsoft.ACE.OLEDB"-Treiber angewiesen ist.

Ich habe die Anweisungen in diesem MS-Forumsthread befolgt: http://goo.gl/h73RmI

Zuerst habe ich versucht, die 64-Bit-Version zu installieren, dann die 32-Bit-Version von AccessDatabaseEngine.exe von dieser Seite http://www.microsoft.com/en-us/download/details.aspx?id=13255

Aber leider keine Freude.

Dann habe ich den folgenden Code in PowerShell ausgeführt (von SQL Panda's Seite http://goo.gl/A3Hu96)

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

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

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

Wie Sie sehen können, habe ich Microsoft.ACE.OLEDB.15.0 (fünfzehn) und nicht Microsoft.ACE.OLEDB.12.0 (zwölf)

Also habe ich meine Verbindungszeichenfolge auf 15 geändert und es hat funktioniert.

Ein kurzes PowerShell-Schnipsel, um zu zeigen, wie die Version dynamisch codiert werden kann...

$AceVersion = ((New-Object System.Data.OleDb.OleDbEnumerator).GetElements() | Where-Object { $_.SOURCES_NAME -like "Microsoft.ACE.OLEDB*" } | Sort-Object SOURCES_NAME -Descending | Select-Object -First 1 SOURCES_NAME).SOURCES_NAME

$connString = "Provider=$AceVersion;Data Source=`"$filepath`";Extended Properties=`"Excel 12.0 Xml;HDR=NO`";"

angepasst, um die neueste ACE-Version auszuwählen, wenn mehr als eine vorhanden ist

Hoffentlich kann jetzt jeder, der dies liest, überprüfen, welche OLEDB-Version installiert ist, und die entsprechende Versionsnummer verwenden.

0 Stimmen

Hallo, ich versuche, Excel-Tabellen mit PowerShell zu lesen. Excel-Dateien sind in einer SharePoint-Dokumentenbibliothek gespeichert und es gibt keine Excel-Installation auf dem Server. Ich habe Windows Server 2008 R2. Ich habe den Office Systemtreiber: Datenzugriffskomponenten installiert, jedoch kann ich bei der Ausführung Ihrer Abfrage Microsoft.ACE.OLEDB nicht sehen. Hast du eine Idee dazu? und einen Vorschlag? Vielen Dank im Voraus.

3 Stimmen

Ich habe die Antwort gefunden. Ich hatte unseren Systemadministrator gebeten, das MS Access Database Engine zu installieren. Er hatte die x86-Version installiert. Als ich die Abfrage erneut in PowerShell x86 ausführte, sah ich ACE.OLEDB.

0 Stimmen

Toller PowerShell-Code. Ich hatte die 32-Bit-Version (die nicht in der PowerShell-Liste angezeigt wurde), was mich daran hinderte, die 64-Bit-Version zu installieren. Nachdem ich die 32-Bit-Version entfernt hatte, konnte ich die 64-Bit-Version ohne die Meldung "Sie haben bereits 32-Bit-Office-Komponenten..." installieren. Die 64-Bit-Version wurde in der PowerShell-Liste angezeigt und meine App begann zu funktionieren.

16voto

mohit busa Punkte 351

Sie müssen die Lösungsplattform von "Any CPU" auf "x86" oder "x64" basierend auf der Bit-Version der Office-Installation ändern.

Die Schritte sind unten aufgeführt:

  1. Klicken Sie mit der rechten Maustaste auf die Lösungsdatei im Lösung Explorer: Bildbeschreibung hier eingeben

    1. Klicken Sie auf den Konfigurations-Manager.

    2. Klicken Sie auf das Dropdown-Menü der aktiven Plattform, wählen Sie x86 aus, falls es bereits vorhanden ist, oder klicken Sie auf Neu. Bildbeschreibung hier eingeben

    3. Wählen Sie x86 oder x64 aus dem Dropdown-Menü der neuen Plattform: Bildbeschreibung hier eingeben

Kompilieren und führen Sie Ihre Anwendung aus.

16voto

Aximili Punkte 27388

Wenn Sie 64-Bit verwenden, aber auch nach der Installation von AccessDatabaseEngine weiterhin Probleme haben, sehen Sie sich diesen Beitrag an. Bei mir hat es das Problem gelöst.

d.h. Sie müssen diese AccessDatabaseEngine installieren

1 Stimmen

Während dieser Link die Frage beantworten kann, ist es besser, die wesentlichen Teile der Antwort hier einzuschließen und den Link als Referenz bereitzustellen. Link-only-Antworten können ungültig werden, wenn sich die verlinkte Seite ändert. - Aus der Überprüfung

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X