579 Stimmen

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

Ich versuche, Daten aus einer Excel-Datei bei einem Klick auf die 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 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 nebenbei bemerkter Kommentar: die Verwendung von OLEDB zum Lesen einer Excel-Datei ist alte Technik, sehr langsam und erfordert, wie Sie entdeckt haben, die manuelle Installation von zusätzlichen Paketen 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 in Sql Server importieren, können Sie diese Abfrage von SSMS ausführen: execute master.dbo.xp_enum_oledb_providers Es wird Ihnen mitteilen, welche Anbieter es glaubt, dass Sie haben. 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, bekam ich die gleiche 'nicht auf Ihrem lokalen Rechner registriert'-Fehlermeldung wie der OP, für beide Excel 16 und Excel 2007 Dateiformate (OlEDB.16.0 und OlEDB.12.0 jeweils). Es macht Sinn, an diesem Punkt Ihre Verluste zu begrenzen und sich von der Microsoft-Software zu verabschieden.

36voto

timodius Punkte 583

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

5 Stimmen

Der OLEDB ist kompatibel mit x64. Er kann unter jeder Plattform ausgeführt werden, NICHT NUR unter x86, sondern auch unter Any CPU. Vollständige Antwort siehe unten: stackoverflow.com/a/32760211/3637582

0 Stimmen

Beim Debuggen der Anwendung in Visual Studio hilft es tatsächlich, in der Konfigurationsverwaltung x86 anstelle von beliebiger CPU/x64 auszuwä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, aber es ist NICHT installiert, wie mit dem Powershell-Skript in einem der vorherigen Beiträge überprüft wurde.

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

Bildbeschreibung hier eingeben

Die sehr einfache Lösung wurde hier auf einer Autodesk-Seite gefunden. Fügen Sie einfach den Parameter /passive zur Befehlszeichenfolge hinzu, wie hier gezeigt:

AccessDatabaseEngine_X64.exe /passive

Installation erfolgreich, der OleDb-Treiber funktionierte.

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

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. Danach 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 wahrscheinlich derjenige, den Sie als zweites installieren, den Parameter erfordern wird.

17voto

TechSpud Punkte 3089

Für alle, die immer noch davon betroffen sind.

Ich habe den Fehler bekommen...

OLEDB-Fehler "Der 'Microsoft.ACE.OLEDB.12.0'-Anbieter 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, aber es wird eine Verbindungszeichenfolge verwendet, ähnlich wie im Beitrag des OP, daher sollten meine Ergebnisse auf C#, PowerShell und jeder anderen Sprache angewendet werden können, die auf dem "Microsoft.ACE.OLEDB"-Treiber basiert.

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 der AccessDatabaseEngine.exe von dieser Seite http://www.microsoft.com/en-us/download/details.aspx?id=13255

Aber leider kein Erfolg.

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

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

...was zu diesem Ergebnis führte (andere Datenquellen wurden 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 du sehen kannst, 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 schneller PowerShell-Abschnitt, um zu zeigen, wie man die Version flexibel codieren 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, falls mehr als eine vorhanden ist

Hoffentlich kann nun jeder, der dies findet, ü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 System Driver: Data Connectivity Components installiert, jedoch kann ich beim Ausführen Ihrer Abfrage Microsoft.ACE.OLEDB nicht sehen. Haben Sie eine Idee dazu? und irgendwelche Vorschläge? Danke im Voraus.

3 Stimmen

Ich habe die Antwort gefunden. Ich hatte unseren Systemadministrator gebeten, das MS Access Database Engine zu installieren. Er hat die x86-Version installiert. Als ich die Abfrage erneut in PowerShell x86 ausgeführt habe, sah ich wieder 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 Bitness der Office-Installation ändern.

Die Schritte sind wie folgt:

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

    1. Klicken Sie auf den Konfigurations-Manager.

    2. Klicken Sie auf das Dropdown-Menü für die aktive Plattform. Wenn x86 bereits vorhanden ist, wählen Sie dieses aus, ansonsten klicken Sie auf Neu.Bildbeschreibung hier eingeben

    3. Wählen Sie x86 oder x64 aus dem Dropdown-Menü für die neue Plattform aus:Bildbeschreibung hier eingeben

Kompilieren und führen Sie Ihre Anwendung aus.

16voto

Aximili Punkte 27388

Wenn Sie 64-Bit verwenden und trotz der Installation von AccessDatabaseEngine immer noch Probleme haben, sehen Sie sich diesen Beitrag an, er hat das Problem für mich gelöst.

d.h. Sie müssen diesen 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 zur Referenz anzugeben. Nur-Link-Antworten können ungültig werden, wenn sich die verlinkte Seite ändert. - Von 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