QU'est-ce QU'IMEX dans la chaîne de connexion OLEDB?

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

Hi. Quel est le but de la société IMEX ?

30
demandé sur Dimitar Tsonev 2012-04-11 12:06:39

4 réponses

cordons de connexion

"si vous voulez lire les en-têtes de colonne dans le jeu de résultats (en utilisant HDR=NO même s'il y a un en-tête) et les données de colonne sont numériques, utilisez IMEX=1 pour éviter le crash.

utiliser toujours IMEX=1 est un moyen plus sûr de récupérer des données pour des colonnes de données mélangées. .."

veuillez noter que la valeur IMEX peut être très importante lorsque vous avez besoin de renvoyer des données à L'Excel. Une recherche rapide sur Internet IMEX a trouvé de nombreux articles sur des problèmes avec diverses valeurs IMEX

27
répondu Steve 2012-08-01 19:14:46

il y a un problème potentiel lors de la lecture de fichiers Excel avec une connexion Oldb.

Si vous utilisez

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

pour une colonne comme la suivante où les 8 premières lignes ont 4 (ou plus) valeurs numériques, puis le type est considéré comme numérique et les valeurs de chaîne sont lues comme null.

notez que l'en-tête n'est pas utilisé comme un en-tête ici (HDR=NO) donc la ligne "zipcode" est la première ligne. (Ces codes postaux sont de la Suède au cas où vous ne reconnaissez pas leur format.)

 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

mais si vos données ressemblent à ceci, où seulement 3 sont numériques des 8 premières lignes

 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

puis ça marche, ça lit tout, comme des cordes.

Si le premier cas est un problème. Mais il existe une solution.

disons que vous utilisez

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

lorsque nous avons changé IMEX à 1 et HDR à oui, alors il lira les données en chaînes dans les deux cas ci-dessus. Mais disons que nous avons des données comme ce

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

alors toutes les 8 premières lignes de données sont numériques et puis elles échouent de nouveau, même si nous avons IMEX=1.

Vous pouvez résoudre ce problème de la manière suivante. Changez la chaîne de connexion en

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

notez que nous avons gardé IMEX=1 mais avons changé HDR en NO.

maintenant la ligne 1 n'est plus traitée comme un en-tête et "zipcode" est lire en tant que données et comme il s'agit clairement d'une chaîne, toutes les lignes sont lues en tant que chaînes (C'est ainsi QU'IMEX=1 travail.)

cette méthode présente quelques inconvénients. Les deux peuvent être résolus:

1) vous ne pouvez pas vous référer à la colonne par son nom (zipcode) mais devez utiliser par exemple F7 selon l'endroit où la colonne est située.

vous pouvez résoudre cela en trouvant où la colonne de zipcode est située (peut être fait programmatiquement) et changer le texte SQL en conséquence par changer " zipcode "En par exemple"F7".

2) la valeur "zipcode" apparaîtra dans vos données.

ceci peut être résolu en ayant F7<> 'zipcode' dans votre clause where. Un pourrait penser que ce serait contrecarrer le fait que nous avons inclus code postal (une chaîne) assurez-vous que toutes les lignes sont traitées comme des chaînes. Après avoir testé ceci il s'avère cependant que la clause où trick qui exclut "zipcode" n'a pas une telle neutralisation effet.

10
répondu Magnus 2015-12-13 02:36:28

lorsque vous lisez un fichier excel dans une table de données, la table de données lit les valeurs de la colonne et après environ 8-10 enregistrements, il assignera le type de données à une colonne. Par exemple, si les valeurs de la colonne sont

11,0

22.0

33.0

44.0

55,0

66.0

77,0

88,0

99,0

abc

Ainsi, la table de données n'aura pas la valeur abc comme la colonne a on lui a attribué le type de données "Double". Pour éviter cela, et pour lire les données complètes IMEX = 1 est utilisé.

N'hésitez pas à commenter pour plus de requêtes.

0
répondu Vishal Kotak 2015-08-20 14:48:27

veuillez utiliser une fonction généralisée dans un Module...

Public Function DeleteBlankRowsfromDataset(ByRef Dtset As DataSet) As Boolean
    Try
        Dtset.Tables(0).AsEnumerable().Where(Function(row) row.ItemArray.All(Function(field) field Is Nothing Or field Is DBNull.Value Or field.Equals(""))).ToList().ForEach(Sub(row) row.Delete())
        Dtset.Tables(0).AcceptChanges()
        DeleteBlankRowsfromDataset = True
    Catch ex As Exception
        MsgBox("Deleting Blank Records in Dataset Failed")
        DeleteBlankRowsfromDataset = False
    End Try

End Function
-6
répondu Raky 2015-10-12 17:59:00