2013-07-18 30 views
26

Ich bin Anfänger in der Verwendung von Microsft.ACE.OLEDB 12.0. Ich erstelle eine Winforms-Anwendung VS 2010.Der Provider "Microsoft.ACE.OLEDB.12.0" ist nicht auf dem lokalen Computer registriert, während der Datenexport an MS ACCESS

Und erstellen Sie eine Funktion zum Exportieren von Daten Grid-Daten in MS Access-Datei. Ich mit Microsoft Oledb

die Daten Rasterdaten zu MS Access file.But für den Export ich diese Fehlermeldung erhalten, wenn ich versuche

die

Daten ms Zugang zu exportieren.

Bitte beachten Sie das Bild unten.

enter image description here

Ich verweise auch die Microsoft.Office 12.0 Object Library in meiner Anwendung.

enter image description here

Batch Build-Konfiguration

enter image description here

Bitte um Hilfe.

Antwort

47

Der Verweis auf die Access Interop Bits hat nichts mit Ihrer Ausnahme zu tun, und Access Interop ist nicht notwendig, um die Klassen in System.Data.OleDb zu verwenden.

Das Problem tritt auf, wenn Sie Ihre Anwendung für AnyCPU Platform kompiliert haben, Sie auf einem 64-Bit-System ausgeführt werden und der installierte ADO.NET-Anbieter (Microsoft ACE.OLEDB.12.0) ist die 32-Bit-Version.

Bei Verwendung der Zielplattform AnyCpu wird Ihr Code als 64-Bit-Code auf 64-Bit-Systemen und als 32-Bit-Code auf 32-Bit-Systemen ausgeführt. Eine Anwendung, die als 64bit ausgeführt wird, kann keine 32-Bit-Treiber (und umgekehrt) verwenden. Fügen Sie dem Mix jetzt die Tatsache hinzu, dass Microsoft.ACE.OLEDB.12.0 zwei verschiedene Versionen hat. Eine für 64bit und eine für 32bit und sie können nicht zusammen auf der gleichen Maschine installiert werden.

Die einfachste Abhilfe ist, die Zielplattform Ihrer Anwendung über Visual Studio-Menü

BUILD -> Configuration Manager -> Active Solution Platform -> x86 

zu ändern, wenn die x86 Option nicht bereits vorhanden ist, dann NEW wählen, Name es x86, Copy Settings from AnyCPU und überprüft Create new project platforms

Wenn Sie denken, dass die Verwendung einer 32bit App auf einem 64bit Betriebssystem ein Leistungsverlust oder etwas zu vermeiden ist, dann denken Sie zweimal nach und lesen Sie this reference wo die PRO und CONS von AnyCpu kritisch untersucht werden. Wenn Sie keinen bestimmten Grund haben, AnyCpu zu verwenden, ist es besser, mit x86 zu bleiben.

Natürlich ist eine weitere Option, die 32-Bit-Version zu deinstallieren und installieren Sie die 64-Bit-Version von ACE from here und dann führen Sie Ihre Anwendung als AnyCpu auf 64-Bit-Systemen. Dies könnte jedoch ein Albtraum für Ihre Bereitstellungsszenarien sein. Was ist, wenn die Microsoft Office 32-Bit-Version auf Ihrem x64-Zielcomputer installiert ist?Office installiert seine bitkompatible Version von ACE, und wie gesagt, ist es nicht möglich, 32-Bit- und 64-Bit-ACE auf derselben Maschine zu installieren.
Jetzt sollten Sie Ihren Kunden auch bitten, Office als 64-Bit neu zu installieren, um Ihre 64-Bit-App weiterhin zu nutzen.

UPDATE


Die Situation hat sich ein wenig mit den neuesten Versionen von Visual Studio geändert. Es gibt jetzt eine neue Option, die standardmäßig für neue Projekte verwendet wird. Es heißt AnyCPU Prefer 32bit Modus. Weitere Informationen unter diesem Link: What AnyCPU Really Means As Of .NET 4.5 and Visual Studio 11 und ein weiterer interessanter Beitrag (wenngleich in Bezug auf Sql Server Compact) ist dieser

+0

Vielen Dank für Ihre wertvolle Antwort. Mein Betriebssystem ist Windows 7 64 Bit.Bitte sehen Sie meine bearbeitete Frage Ich füge ein Bild in der Batch-Build-Konfiguration –

+1

No Batch Build, verwenden Sie Configuration Manager und setzen Sie die aktive Lösung Plattform als x86 – Steve

+0

Aber es funktioniert in beiden Plattform ich meine, gibt es eine Chance, 32 Bit und 64 zu verwenden Bit OS. –

8

Ändern Sie in seinem App-Pool "erweiterte Einstellungen" zu ermöglichen, 32-Bit-Programme ausführen ... das hat es getan mich.

+0

Einfach und korrekt. – ronen

6

Ich habe ähnliches Problem, wenn wir Excel-Datei lesen.

Geschichte des Problems:

Wir wanderten vor kurzem unsere Anwendung von 32-Bit auf 64-Bit wegen des Speicherbedarfs. Dafür haben wir unsere Windows 7 von 32-Bit auf 64-Bit migriert. Aber wir haben immer noch 32-Bit-Office auf unseren Maschinen installiert.

weil dieses Problem beim Importieren von Excel-Daten in die Anwendung aufgetreten ist.

Lösung,

I 64-Bit-Version des http://www.microsoft.com/en-us/download/details.aspx?id=13255 heruntergeladen und mit dem Argument installiert wie

AccessDatabaseEngine_x64.exe/passiv

Ohne Code mein Problem gelöst bekommen ändern.

Hinweis:

Auf 64-Bit-Betriebssystem und 64-Bit-Büro, meine Funktionalität funktioniert gut ohne dieses Updates. Dieser Fix wird nur benötigt, wenn unsere Anwendung 64-Bit auf einem 64-Bit-Betriebssystem ausführt, auf dem 32-Bit-Office installiert ist.

+0

Tausend Dank für die Lösung! besonders für das/passive Argument! –

+0

Bravo! Gut gemacht! – Behnam