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 die Schaltfläche zu erhalten. Mein 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 Computer nicht registriert.

Ich habe keinen Schimmer, wie ich das beheben kann. Mein Betriebssystem ist Windows 7.

13 Stimmen

Nur ein kommentar: Die Verwendung von OLEDB zum Lesen einer Excel-Datei ist veraltete Technologie, sehr langsam und wie Sie festgestellt haben, erfordert die manuelle Installation zusätzlicher Pakete auf Ihrem Zielsystem. (Zugegeben, die Frage wurde 2011 gestellt.) Es ist besser, ClosedXml (verfügbar auf NuGet) zu verwenden, 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 sagen, welche Anbieter es denkt, dass Sie haben. Es hat mir gesagt, dass ich sowohl Microsoft.ACE.OLEDB.16.0 als auch Microsoft.ACE.OLEDB.12.0 hatte, aber als ich versuchte, Daten zu importieren, bekam ich dasselbe 'nicht auf Ihrem lokalen Rechner registriert' wie der OP, sowohl für Excel 16 als auch für Excel 2007 Dateiformate (oledb.16.0 und oledb.12.0 jeweils). Es macht Sinn, an diesem Punkt den Verlust abzuschneiden und sich von der Microsoft-Software zu verabschieden.

36voto

timodius Punkte 583

Ich habe diesen Fehler/Ausnahme in Visual Studio 2010 erhalten, als ich meine Build-Konfiguration im Dialogfeld des Konfigurationsmanagers 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 kompatibel mit x64. Er kann unter ALLEN Plattformen 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 Fehlerbehebung der Anwendung in Visual Studio hilft es tatsächlich, in der Konfigurations-Manager "x86" anstelle von "Any CPU/x64" auszuwählen.

22voto

josh Punkte 642

Auch wenn viele Antworten gegeben wurden, das Problem, auf das ich gestoßen bin, wurde 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, aber ist 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:

Gib hier eine Bildbeschreibung ein

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

AccessDatabaseEngine_X64.exe /passive

Installation erfolgreich, der OleDb-Treiber funktioniert.

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 herkömmliche Weise installieren, aber ich habe das passive 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

Das 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, musste jedoch den passiven Parameter an AccessDatabaseEngine.exe übergeben (muss die 32-Bit-Version sein). Ich vermute, dass für die zweite Installation wahrscheinlich der Parameter erforderlich ist, egal welche Version.

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 Computer nicht registriert."

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

Ich habe 64-Bit-Windows 7.

Mein Problem liegt in PowerShell-Skripten, die jedoch eine Verbindungszeichenfolge verwenden, ähnlich wie im Post des OPs, 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 den Anweisungen in diesem MS-Forumsthread gefolgt: http://goo.gl/h73RmI

Ich habe zuerst versucht, die 64-Bit-Version zu installieren, dann die 32-Bit-Version von AccessDatabaseEngine.exe von dieser Seite installiert 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 Website http://goo.gl/A3Hu96)

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

...das gab mir dieses Ergebnis (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) nicht Microsoft.ACE.OLEDB.12.0 (zwölf)

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

Also, hier ein schnelles PowerShell-Snippet, um zu demonstrieren, wie man die Version flexibel codiert...

$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 können Personen, die dies finden, jetzt überprüfen, welche OLEDB-Version installiert ist und die entsprechende Versionsnummer verwenden.

0 Stimmen

Hallo, ich versuche, Excel-Tabellen mit PowerShell zu lesen. Die 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, aber wenn ich 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 hat die x86-Version installiert. Als ich die Abfrage erneut in PowerShell x86 ausgeführt habe, sah ich ACE.OLEDB.

0 Stimmen

Erstaunlicher 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-Tiefe der Office-Installation ändern.

Die Schritte sind wie folgt:

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

    1. Klicken Sie auf den Konfigurations-Manager.

    2. Klicken Sie auf die Dropdown-Liste der aktiven Plattform, wenn dort bereits x86 vorhanden ist, wählen Sie diese aus, ansonsten klicken Sie auf Neu. Geben Sie hier die Bildbeschreibung ein

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

Kompilieren und führen Sie Ihre Anwendung aus.

16voto

Aximili Punkte 27388

Wenn Sie 64-Bit verwenden und trotz 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

Obwohl 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. - 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