579 Stimmen

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

Ich versuche, Daten aus einer Excel-Datei bei einem Klickereignis auf eine Schaltfläche zu erhalten. Mein Verbindungszeichenfolge ist:

 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 soll. Mein Betriebssystem ist Windows 7.

13 Stimmen

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

7 Stimmen

@ShaulBehr 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 sagen, welche Anbieter es denkt, die 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 dasselbe 'nicht auf Ihrem lokalen Rechner registriert', wie der OP, für beide Excel 16 und Excel 2007-Dateiformate (oledb.16.0 und oledb.12.0 entsprechend). Es macht Sinn, an diesem Punkt Ihre Verluste zu akzeptieren und auf die Microsoft-Software zu verzichten.

36voto

timodius Punkte 583

Ich habe diesen Fehler/Ausnahme in Visual Studio 2010 erhalten, als ich mein Build im Dialogfeld "Konfigurations-Manager" von "x86" auf "Any CPU" geändert habe. Dieser OLEDB-Datenbanktreiber funktioniert meiner Kenntnis nach nur in x86 und ist nicht kompatibel mit 64-Bit. Die Änderung der Build-Konfiguration zurück auf x86 hat das Problem für mich gelöst.

5 Stimmen

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

0 Stimmen

Bei der Fehlersuche in der Anwendung in Visual Studio hilft es tatsächlich, in der Konfigurations-Manager x86 anstelle von any CPU/x64 zu wählen.

22voto

josh Punkte 642

Auch wenn viele Antworten gegeben wurden, wurde das von mir festgestellte Problem noch nicht erwähnt.

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

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

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

Bildbeschreibung hier eingeben

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

AccessDatabaseEngine_X64.exe /passive

Die Installation war 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 bearbeitet.

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

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

17voto

TechSpud Punkte 3089

Für alle Betroffenen.

Ich habe den Fehler bekommen...

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

...wie von 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 von OP, also hoffentlich können meine Erkenntnisse auf C#, PowerShell und jede andere Sprache angewendet werden, die auf dem Treiber "Microsoft.ACE.OLEDB" 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 des AccessDatabaseEngine.exe von dieser Seite zu installieren http://www.microsoft.com/en-us/download/details.aspx?id=13255

Aber immer noch kein Glück.

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 (ich habe andere Datenquellen 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 schnelles PowerShell-Schnipsel, um zu zeigen, wie Sie die Version dynamisch festlegen können...

$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 können jetzt alle, die auf diesen Beitrag stoßen, ü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 werden in einer SharePoint-Dokumentenbibliothek gespeichert und es gibt keine Excel-Installation auf dem Server. Ich habe Windows Server 2008 R2. Ich habe Office System Driver: Data Connectivity Components installiert. Wenn ich jedoch Ihre Abfrage ausführe, kann ich Microsoft.ACE.OLEDB nicht sehen. Haben Sie 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 Solution Platform von "Any CPU" auf "x86" oder "x64" basierend auf der Bitzahl der Office-Installation ändern.

Die Schritte sind unten aufgeführt:

  1. Klicken Sie mit der rechten Maustaste auf die Solution-Datei im Solution Explorer: Bildbeschreibung hier eingeben

    1. Klicken Sie auf den Konfigurations-Manager.

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

    3. Wählen Sie x86 oder x64 aus dem Dropdown-Menü der neuen Plattform aus: 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 immer noch Probleme haben, sehen Sie sich diesen Beitrag an, er hat das Problem für mich 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 zur Referenz bereitzustellen. Link-only-Antworten können ungültig werden, wenn sich die verlinkte Seite ändert. - Überprüfen

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