web-dev-qa-db-de.com

Was ist IMEX in der OLEDB-Verbindungszeichenfolge?

string connString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=localhost;Extended Properties=""Excel 8.0;HDR=Yes;IMEX=2"

Hallo. Was ist der Zweck von IMEX?

31
Dimitar Tsonev

Von ConnectionStrings

"Wenn Sie die Spaltenüberschriften in die Ergebnismenge einlesen möchten (mit HDR = NO, obwohl ein Header vorhanden ist) und die Spaltendaten numerisch sind, verwenden Sie IMEX = 1, um einen Absturz zu vermeiden.

Die Verwendung von IMEX = 1 ist immer eine sicherere Methode, um Daten für gemischte Datenspalten abzurufen. .. "

Bitte beachten Sie, dass der IMEX-Wert sehr wichtig sein kann, wenn Sie Daten in Excel zurückschreiben müssen. Eine schnelle Suche im Internet über IMEX fand zahlreiche Artikel zu Problemen mit verschiedenen IMEX-Werten

30
Steve

Beim Lesen von Excel-Dateien mit einer OleDbConnection liegt möglicherweise ein Problem vor. 

Wenn du benutzt 

  "Extended Properties='Excel 8.0;HDR=NO;IMEX=3;'"

bei einer Spalte wie der folgenden, in der die ersten 8 Zeilen 4 (oder mehr) numerische Werte enthalten, wird der Typ als numerisch betrachtet und die Zeichenfolgenwerte als Nullwert gelesen.

Beachten Sie, dass der Header hier nicht als Header verwendet wird (HDR = NO), daher ist die Zeile "Postleitzahl" die erste Zeile. (Diese Postleitzahlen stammen aus Schweden, falls Sie das Format nicht erkennen.)

 1) zipcode
 2) 125 45
 3) 115 50
 4) 18735
 5) 11335
 6) 13940
 7) 181 55
 8) 11759
 9) 176 74
10) 137 38

Wenn Ihre Daten jedoch so aussehen, sind nur 3 der ersten 8 Zeilen numerisch

 1) zipcode
 2) 125 45
 3) 115 50
 4) 18735
 5) 11335
 6) 139 40 <-- This one changed so that it is a string
 7) 181 55
 8) 11759
 9) 176 74
10) 137 38

dann funktioniert es, es liest alles als strings.

Der erste Fall ist also ein Problem. Aber es gibt eine Lösung.

Nehmen wir an, Sie verwenden

  "Extended Properties='Excel 8.0;HDR=YES;IMEX=1;'"

wenn wir IMEX in 1 und HDR in YES geändert haben, werden die Daten in beiden Fällen oben als Zeichenfolgen gelesen. Aber wir haben solche Daten

 1) zipcode
 2) 12545
 3) 11550
 4) 18735
 5) 11335
 6) 13940
 7) 18155
 8) 11759
 9) 17674
10) 137 38

dann sind alle ersten 8 Datenzeilen numerisch und dann schlagen sie erneut fehl, obwohl wir IMEX = 1 haben.

Sie können dieses Problem auf folgende Weise lösen. Ändern Sie die Verbindungszeichenfolge in diese

  "Extended Properties='Excel 8.0;HDR=NO;IMEX=1;'"

Beachten Sie, dass wir IMEX = 1 beibehalten, aber HDR wieder in NO geändert haben. 

Jetzt wird Zeile 1 nicht mehr als Header behandelt und "zipcode" wird als Daten gelesen. Da es sich eindeutig um einen String handelt, werden alle Zeilen als Strings gelesen. 

Diese Methode hat einige Nachteile. Beides kann gelöst werden:

1) Sie können die Spalte nicht anhand ihres Namens (Postleitzahl) referenzieren, sondern müssen beispielsweise F7 verwenden, je nachdem, wo sich die Spalte befindet. 

Sie können dieses Problem lösen, indem Sie herausfinden, wo sich die Spalte mit der Postleitzahl befindet (kann programmgesteuert durchgeführt werden) und den SQL-Text entsprechend um .__ ändern. Ändern der "Postleitzahl" zum Beispiel "F7".

2) Der Wert "Postleitzahl" wird in Ihren Daten angezeigt. 

Sie können dieses Problem lösen, indem Sie in Ihrer where-Klausel F7 <> 'zipcode' eingeben. Ein könnte meinen, dass dies der Tatsache entgegenwirken würde, dass wir Postleitzahl (eine Zeichenfolge), um sicherzustellen, dass alle Zeilen als Zeichenfolgen behandelt werden . Nach dem Testen stellt sich jedoch heraus, dass die where-Klausel Trick, der "Postleitzahl" ausschließt, hat keine solche Gegenwirkung bewirken.

12
Magnus

Wenn Sie eine Excel-Datei in eine Datentabelle lesen, liest die Datentabelle die Spaltenwerte und nach etwa 8-10 Datensätzen weist sie einer Spalte den Datentyp zu. Zum Beispiel, wenn die Spaltenwerte sind 
11.0
22.0
33.0
44.0
55.0
66,0
77,0
88,0
99.0
ABC
.__ Die Datentabelle hat also nicht den Wert abc, da der Spalte der Datentyp "Double" zugewiesen wurde. Um dies zu vermeiden und vollständige Daten zu lesen, wird IMEX = 1 verwendet.
Bitte kommentieren Sie weitere Fragen.

0
Vishal Kotak