2010-09-08 2 views
6

ich den Inhalt einer Excel-Tabelle in meiner Anwendung liest mit:Lesen von Excel: Microsoft.Jet.OLEDB.4.0 Fehler auf 64-Bit-Systeme

OleDbConnection con = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + fileName + ";Extended Properties=Excel 8.0"); 
_myDataSet = new DataSet(); 
OleDbDataAdapter myCommand = new OleDbDataAdapter(" SELECT * FROM [" + "My Sheet" + "$]", con); 

myCommand.Fill(_myDataSet); 
con.Close(); 

Dies wird in 64-Bit-Systeme mit dem Fehler Fehler :

Microsoft.Jet.OLEDB.4.0' provider is not registered on the local machine

Wie funktioniert das in 64-Bit-Maschinen?

Antwort

5

Microsoft.Jet.OLEDB hat keine 64-Bit-Version, nur 32-Bit. Kompilieren Sie Ihre Anwendung als 32-Bit (Plattformziel: x86 in Build-Option).

+0

Ja, oder Sie können corflags.exe verwenden, um die Baugruppe in den 32-Bit-Modus zu versetzen. –

1

Ich glaube nicht, es funktioniert ... diese Frage im Zusammenhang sehen: OleDB not supported in 64bit mode?

Das Problem scheint zu sein, dass die COM/Interop ist nicht für 64-Bit-Umgebungen konzipiert, und so kann es nicht registriert werden im 64-Bit-Modus.

Sie können die Ausführung Ihrer .NET-Anwendung im 32-Bit-Modus auf dem 64-Bit-Computer erzwingen, wodurch Sie auf die OleDB-Funktionalität zugreifen können.

10

Microsoft veröffentlichte eine Treiberverteilung mit einem 64-Bit-Treiber, der für Access und Excel funktioniert. Sie können die 64-Bit- und 32-Bit-Versionen von der MS downloads-Website herunterladen. Auf der Download-Seite finden Sie auch eine kurze Beschreibung dessen, was Sie in Ihrer Verbindungszeichenfolge ändern müssen, um auf den ACE-Treiber zu verweisen.

Auf den Punkt gebracht, installieren Sie den Treiber Verteilung 64-Bit- und dann die Verbindungszeichenfolge, um etwas entlang der Linien von ändern:

es
string connStr = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + fileName + ";Extended Properties=""Excel 8.0;IMEX=1""";