[C#] OLE CALL à Excel avec la clause WHERE


Answers

Question

Je travaille sur la correction d'un projet C # qui utilise une feuille Excel avec définition de données pour créer un fichier .fmt utilisé par une insertion en bloc dans SQL Server.

Mon problème est que les fichiers Excel ont parfois des lignes vides en bas et l'analyseur C # sur lequel je travaille détectera un nombre de lignes supérieur au nombre réel de lignes contenues dans la définition de données.

Le fichier fmt a donc un plus grand nombre de lignes sur sa deuxième ligne et l'insertion en bloc lève une exception quand elle atteint le bas et essaie de lire.

Par exemple, il n'y a que 50 lignes avec des données et 50 lignes vides. Le fichier FMT aura un 100 sur sa deuxième ligne (la première ligne est pour la version SQL Server). Les lignes 3 à 52 sont les 50 lignes de définition de données. Lorsque l'insertion en masse tente d'atteindre la ligne 53, elle renvoie un nombre d'exception de colonne.

L'analyseur C # utilise Ace OleDB 12 pour se connecter au fichier de format Excel 97.

Le SQL est:

var commandText = string.Format("SELECT * FROM [{0}$]", SpreadSheetName);

J'ai essayé d'ajouter une clause WHERE au code SQL pour sélectionner uniquement des lignes avec une colonne "A" non vide, mais cela ne fonctionne pas.

SELECT * FROM [{0}$] WHERE [A] <> ''

Existe-t-il un moyen d'améliorer le texte de commande avec du code SQL pour extraire uniquement des lignes de données d'Excel lorsqu'une certaine condition est remplie?