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.

8voto

Sharif Lotfi Punkte 479

Machen Sie diese 2 Schritte:

  1. In diesem Menü: Projekt -> Ihre Projekt Eigenschaften ... -> Build: "Prefer 32-Bit" deaktivieren
  2. In der connectionString: Setzen Sie Anführungszeichen vor und nach Extended Properties, wie hier: Extended Properties='Excel 12.0 Xml;HDR=YES'

    var fileName = string.Format("{0}", openFileDialog1.FileName); var connectionString = string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0}; Extended Properties='Excel 12.0 Xml;HDR=YES'", fileName); var adapter = new OleDbDataAdapter("SELECT * FROM [Sheet1$]", connectionString); var ds = new DataSet();

    adapter.Fill(ds, TableNmae);

    DataTable data = ds.Tables[TableNmae]; dg1.DataSource = data;

1 Stimmen

Das Deaktivieren von "Bevorzugen von 32-Bit" schien bei mir zu funktionieren, während Microsoft Access Database Engine 2010 Redistributable installiert war.

1 Stimmen

"Prefer 32-Bit" deaktivieren funktioniert für mich. Vielen Dank.

0 Stimmen

Das Deaktivieren von "Bevorzuge 32-Bit" funktioniert auch für mich.

7voto

Albert Zakhia Punkte 99

Wenn Sie ein Webprojekt debuggen, stellen Sie sicher, dass IIS Express je nach Ihren Projekteinstellungen in 32 oder 64 Bit läuft.

Gehen Sie zu

Tools > Optionen > Projekte und Lösungen > Webprojekte

und überprüfen (oder deaktivieren) Sie dort die Option 'Verwenden der 64-Bit-Version von IIS Express...'

1 Stimmen

Wow eine Menge Stunden damit verbracht, andere Lösungen zu versuchen, nur deine hat es gerichtet! Danke

7voto

Ken Johnson Punkte 330

Ich konnte das durch Befolgen der Schritte in diesem Artikel beheben: http://www.mikesdotnetting.com/article/280/solved-the-microsoft-ace-oledb-12-0-provider-is-not-registered-on-the-local-machine

Der entscheidende Punkt für mich war folgender:

Beim Debugging mit IIS,

verwendet Visual Studio standardmäßig die 32-Bit-Version. Sie können dies innerhalb von Visual Studio ändern, indem Sie zu Tools » Optionen » Projekte und Lösungen » Webprojekte » Allgemein gehen und wählen

"Verwenden Sie die 64-Bit-Version von IIS Express für Websites und Projekte"

Nachdem ich diese Option überprüft hatte, dann die Plattformziel meines Projekts wieder auf "Any CPU" gesetzt hatte (ich hatte es irgendwo im Fehlerbehebungsprozess auf x86 gesetzt), konnte ich den Fehler überwinden.

1 Stimmen

Vielen Dank, die meisten anderen Antworten beziehen sich auf die Umstellung auf 32 Bit, aber diese hier hilft Ihnen dabei, auf 64 Bit umzusteigen.

0 Stimmen

Vielen Dank, das ist genau das, wonach ich gesucht habe.

7voto

Harminder Singh Punkte 153

Eine 64-Bit-Version des 'Microsoft Access Database Engine 2010-Verteilungspakets', das es ermöglicht, den Anbieter 'Microsoft.ACE.OLEDB.12.0' zu verwenden, ist hier verfügbar: http://www.microsoft.com/en-us/download/details.aspx?id=13255

Wenn Sie VS 2012 oder neuer verwenden, stellen Sie sicher, dass das Kontrollkästchen "32-Bit bevorzugen" im Bereich Eigenschaften => Build => Allgemeine Konfiguration des Projekts nicht aktiviert ist Bildbeschreibung hier eingeben

6voto

Shubham Tiwari Punkte 118

Überprüfen Sie zuerst, welche Version von Microsoft.ACE.OLEDB.12.0 auf Ihrem System installiert ist.

Überprüfen Sie im folgenden Pfad C:\Program Files\Common Files\Microsoft Shared\OFFICE14\ACEOLEDB.DLL - 64 Bit ist installiert

Überprüfen Sie im folgenden Pfad C:\Program Files (x86)\Common Files\Microsoft Shared\OFFICE14\ACEOLEDB.DLL - 32 Bit ist installiert

Wenn (x86) installiert ist, ändern Sie mit dem Konfigurations-Manager die Lösungsplattform zu x86, für x64 ändern Sie auf x64.

Wenn nicht verfügbar, installieren Sie mit folgendem Link

https://www.microsoft.com/en-us/download/details.aspx?id=23734

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