En décembre 2010, Microsoft (enfin!) A publié un pilote OLEDB 64 bits pour les fichiers CSV et XLSX. Vous aurez besoin du Microsoft Access Database Engine 2010 Redistributable 64 bits. Assurez-vous de télécharger la version 64 bits (AccessDatabaseEngine_X64.exe
). Vous devez désinstaller toutes les applications Office 32 bits (y compris Sharepoint Designer!) Afin de l'installer. Si vous voulez CSV, vous voulez le nom du pilote Microsoft Access Text Driver (*.txt, *.csv)
, mais je n'ai pas encore trouvé de chaîne de connexion complète en utilisant ce pilote de OLEDB (bien que si vous avez, laissez un commentaire et je vais modifiez cette réponse). Notez que les noms 64 bits sont différents des versions 32 bits.
Pour la lecture des fichiers XLSX, utilisez une chaîne de connexion comme ceci:
"Provider=Microsoft.ACE.OLEDB.12.0;Data Source="
+ FilePath
+ ";Extended Properties=\"Excel 12.0;HDR=Yes;IMEX=2\"";
Pour XLS fichiers (pré-2007 Excel) utilisent une chaîne de connexion comme ceci:
"Provider=Microsoft.ACE.OLEDB.12.0;Data Source="
+ FilePath
+ ";Extended Properties=\"Excel 8.0;HDR=Yes;IMEX=2\"";
Un grand merci à this blog post et this answer pour me pointer dans la bonne direction quand j'ai rencontré le même problème, et pour fournir du contenu, je me suis adapté à écrire cette réponse.
Que signifie "non ouvert"? Vous n'ouvrez rien, vous exécutez une requête. La syntaxe est correcte, l'absence d'une exception indiquerait que soit dt est rempli de lignes ou que la feuille était vide. Ajoutez Console.WriteLine (dt.Rows.Count) pour une vérification de base. –
Je vous recommande d'essayer une expression SELECT directement et de voir ce que vous obtenez avant de remplir le DT. Si la requête crache une erreur, ajoutez-la à la question ici. Si ce n'est pas le cas et qu'il dit que c'est réussi, alors Hans a raison de dire que votre feuille est vide. – Phillip