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.

667voto

Variant Punkte 16951

Nun, Sie müssen es installieren. Sie suchen nach:

61 Stimmen

Ich habe diese Komponenten heruntergeladen und sie haben nicht für mich funktioniert, ich musste das Microsoft Access Database Engine 2010 Redistributable von hier herunterladen: microsoft.com/en-in/download/details.aspx?id=13255 Ich bin mir sicher, dass es daran liegt, dass ich MS Office 2013 verwende. Danke, dass Sie mich jedoch in die richtige Richtung verwiesen haben.

7 Stimmen

Ich musste den Access-Datenbank-Engine und den 2007 Office System-Treiber: Datenkonnektivitätskomponenten hier microsoft.com/de-de/download/confirmation.aspx?id=23734 installieren, damit es funktioniert.

8 Stimmen

Meine Situation, alles funktionierte einwandfrei, dann plötzlich begann dieser Fehler aufzutreten. Also, was könnte passiert sein, um dies zu verursachen? Kein Code wurde geändert.

203voto

rsbarro Punkte 26319

Eine 64-Bit-Version des 'Microsoft Access Database Engine 2010 Redistributable', die es Ihnen ermöglicht, den Anbieter 'Microsoft.ACE.OLEDB.12.0' zu verwenden, finden Sie hier:
http://www.microsoft.com/en-us/download/details.aspx?id=13255

Wenn Sie den Download aus der angenommenen Antwort verwenden, müssen Sie für x86 kompilieren, wie von @backtestbroker.com angemerkt.

23 Stimmen

Wenn Sie VS 2012 verwenden, achten Sie auch darauf, dass das Kontrollkästchen "32-Bit bevorzugen" im Projekt unter Eigenschaften >> Build >> Allgemeine Konfiguration nicht aktiviert ist.

0 Stimmen

@post_erasmus - Dieser Schritt war DER SCHLÜSSEL für mich nach der Installation der 64-Bit-DLL. (Man musste vielleicht sogar nicht einmal installieren.) Danke!

3 Stimmen

Ich benutze VS 2008 (frag nicht) und diese Lösung hat nicht funktioniert, bis ich den Tipp von post_erasmus gelesen habe und 'Plattformziel' in den Eigenschaften >> Erstellen >> Allgemeine Konfiguration meiner Anwendung auf x64 gesetzt habe. Gelöst, danke!

114voto

Bernhard Punkte 2281

Je nach App (32/64-Bit), die die Verbindung verwendet, könnten Sie einfach installieren

Zusammenfassung:

  • alle Office-Versionen von 2007-2016 enthalten den Anbieter "Microsoft.ACE.OLEDB.12.0"

  • je nach Architektur Ihrer Anwendung wählen Sie die entsprechende Laufzeitumgebung (32/64) 6

  • Überprüfen Sie Ihre Anbieter mit dem PowerShell-Befehl sowohl aus der 32 als auch aus der 64-Bit-Shell:

    (New-Object system.data.oledb.oledbenumerator).GetElements() | select SOURCES_NAME, SOURCES_DESCRIPTION 
  • und Sie sehen, welchen Anbieter Ihr System verwenden kann

die lange Geschichte: die Zeichenfolgen können mit http://live.sysinternals.com/strings.exe gefunden werden

z. B. auf einem 64-Bit-System mit installierten 32-Bit-Treibern

strings.exe -u -n 10 "c:\Program Files (x86)\Common Files\microsoft shared\OFFICE12\MSO.DLL" | findstr "ACE.O"
strings.exe -u -n 10 "c:\Program Files (x86)\Common Files\microsoft shared\OFFICE14\MSO.DLL" | findstr "ACE.O"
strings.exe -u -n 10 "c:\Program Files (x86)\Common Files\microsoft shared\OFFICE15\MSO.DLL" | findstr "ACE.O"

auch im bevorstehenden Office 2016

c:\Program Files\Microsoft Office\root\VFS\ProgramFilesCommonX64\Microsoft Shared\OFFICE16\MSO.DLL
c:\Program Files\Microsoft Office\root\VFS\ProgramFilesCommonX86\Microsoft Shared\OFFICE16\MSO.DLL

finden Sie die Zeichenfolgen

  • Microsoft.ACE.OLEDB

  • Microsoft.ACE.Oledb.12.0

Office 2013 kommt auch mit csi.dll

c:\Program Files (x86)\Common Files\microsoft shared\OFFICE15\Csi.dll
c:\Program Files\Common Files\Microsoft Shared\OFFICE15\Csi.dll

die "Microsoft.ACE.OLEDB.15.0" enthält

und Office 2016

c:\Program Files\Microsoft Office\root\VFS\ProgramFilesCommonX64\Microsoft Shared\OFFICE16\Csi.dll
c:\Program Files\Microsoft Office\root\VFS\ProgramFilesCommonX86\Microsoft Shared\OFFICE16\Csi.dll

hat die Version "Microsoft.ACE.OLEDB.16.0"

0 Stimmen

Ich habe diesen Fehler in VS2015 beim Verwenden von Nuget LinqToExcel bekommen. Es stellte sich heraus, dass ich aufgrund der Installation von x64 ACE explizit für x64 (Konfigurations-Manager) statt für Any CPU zielen musste.

0 Stimmen

Powershell hat angezeigt, dass "Microsoft.ACE.Oledb.12.0" bereits installiert war. Aber nach der Installation des Access 2007-Pakets (auch bekannt als 2007 Office System Driver: Data Connectivity Components) konnte ich loslegen. Bereits auf meinem System vorhanden: Office 2016 Ent, Visual Studio 2017 Ent

12 Stimmen

Der PowerShell-Befehl, der darüber informiert, welche Version installiert ist, ist genial! Vielen Dank @Bernhard

62voto

Merav Kochavi Punkte 3925

Das erste, was Sie überprüfen müssen, ist die Build-Konfiguration Ihrer Anwendung.

  • Wenn Sie Ihr Projekt unter der x86-Plattform erstellt haben, müssen Sie zur Lösung Ihres Problems die folgenden Pakete auf Ihrem Computer installieren:

    1. Um den Anbieter 'Microsoft.ACE.OLEDB.12.0' verwenden zu können, müssen Sie zuerst das Microsoft Access Database Engine 2010-Redistributable installieren, diese Installation ist verfügbar unter: http://www.microsoft.com/download/en/details.aspx?id=13255 .

      Nach Abschluss der Installation versuchen Sie, Ihre Anwendung auszuführen. Wenn das Problem dadurch gelöst wird, ist das großartig, andernfalls fahren Sie mit Schritt 2 fort.

    2. Dieser nächste Schritt ist ein ungeklärter Workaround, der für Office 2010 funktioniert, obwohl es sich um die Data Connectivity Components von Office 2007 handelt. Ich bin mir nicht ganz sicher, warum dies funktioniert, aber es funktioniert und es wurde in fast allen Fällen als funktionierend nachgewiesen. Sie müssen die 2007 Office System Driver: Data Connectivity Components installieren, diese Installation ist verfügbar unter: http://www.microsoft.com/download/en/confirmation.aspx?id=23734 .

      Nach Abschluss dieser Installation versuchen Sie, Ihre Anwendung auszuführen, damit sollte das Problem behoben sein.

  • Wenn Sie versuchen, eine Anwendung unter x64- oder AnyCPU-Plattform auszuführen, empfehle ich zunächst zu überprüfen, ob sie unter der x86-Plattform wie erwartet läuft. Sollte sie unter der x86-Plattform nicht laufen, führen Sie die Schritte im ersten Teil durch und überprüfen Sie, ob sie wie erwartet läuft.

    Ich habe gelesen, dass die MS Access-Treiber einschließlich des OLEDB-Datenbanktreibers nur unter der x86-Plattform funktionieren und unter der x64- oder AnyCPU-Plattform nicht kompatibel sind. Das scheint jedoch nicht zu stimmen. Ich habe validiert, dass meine Anwendung lief, als ich unter x86 gebaut habe, dann habe ich den Access Database Engine unter Verwendung des passiven Flags installiert.

    1. Laden Sie die Datei zunächst lokal herunter. Sie können die Installation hier herunterladen: http://www.microsoft.com/en-us/download/details.aspx?id=13255
    2. Installation über die Eingabeaufforderung mit dem '/passive'-Flag. Führen Sie in der Eingabeaufforderung den folgenden Befehl aus: 'AccessDatabaseEngine_x64.exe /passive'

    Nach diesen 2 Schritten konnte ich meine Anwendung nach dem Bauen in x64- oder AnyCPU-Build-Konfiguration ausführen. Das schien mein Problem zu lösen.

Hinweis: Die Reihenfolge der Schritte scheint einen Unterschied zu machen, also folgen Sie bitte entsprechend.

6 Stimmen

Ich hatte das Problem, dass ich von einer 32-Bit-Anwendung auf 64-Bit umgestellt habe und sie nicht mehr lief. Der zweite Teil Ihrer Anweisungen funktioniert perfekt! Die /passive Flagge ermöglicht die Installation auch mit einem 32-Bit Microsoft Office.

4 Stimmen

Tipp: Extrahieren Sie die AccessDatabaseEngine_x64.exe in einen Ordner, um die AceRedist.msi und eine Data.cab-Dateien zu erhalten. Öffnen Sie das cmd-Prompt im Admin-Modus und führen Sie die AceRedist.msi /passive aus.

2 Stimmen

Vielen Dank. Die erste Option hat bei mir funktioniert. Ich erinnere mich, wie viel Ärger ich hatte, um das 32-Bit-Office zu deinstallieren und erst nach der Installation des 64-Bit-Office wurde dieses Problem früher behoben. Aber dieses 64-Bit-Office-Komponente hat stattdessen die Magie bewirkt.

38voto

Shaul Behr Punkte 35201

Ich habe die MS-Treiber installiert und es hat immer noch nicht funktioniert. Dann habe ich diesen Blog-Beitrag gefunden, der das Problem gelöst hat. Lesen Sie es dort, sonst verwenden Sie diese beiden Bilder (verlinkt aus diesem Beitrag) als TLDR-Zusammenfassung:

Bildbeschreibung hier eingeben

Bildbeschreibung hier eingeben

0 Stimmen

War gerade dabei, dies als meinen Beitrag zu veröffentlichen. Das war mein Problem. Ich habe gestern diese IIS-Einstellung geändert, da ein Projekt in meiner Lösung x86-kompiliert war, also nehme ich an, dass es das gesamte Programm als 32-Bit-Klasse klassifiziert.

0 Stimmen

Mein Server läuft mit 64-Bit, aber die installierten MS Office-Komponenten sind 32-Bit. Das hat mein Problem gelöst. Vielen Dank.

0 Stimmen

Was für eine unglaublich schwierige Sache, um zum Laufen zu bringen :(, Ich frage mich, ob du das in Powershell skripten könntest und einfach in irgendeine Art von automatisiertem Server-Setup-Skript integrieren könntest?

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