Dans mon application C#, j'utilise le fournisseur de données Microsoft Jet OLEDB pour lire un fichier CSV. La chaîne de connexion ressemble à ceci:Lors de la lecture d'un fichier CSV à l'aide d'un DataReader et du fournisseur de données OLEDB Jet, comment puis-je contrôler les types de données de colonne?
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\Data;Extended Properties="text;HDR=Yes;FMT=Delimited
-je ouvrir un OleDbConnection ADO.NET en utilisant cette chaîne de connexion et sélectionnez toutes les lignes du fichier CSV avec la commande:
select * from Data.csv
Quand j'ouvre un OleDbDataReader et d'examiner les types de données des colonnes qu'il retourne, je trouve que quelque chose dans la pile a essayé de deviner les types de données en fonction de la première ligne de données dans le fichier. Par exemple, supposons que le fichier CSV contient:
House,Street,Town
123,Fake Street,Springfield
12a,Evergreen Terrace,Springfield
Appel de la méthode OleDbDataReader.GetDataTypeName pour la colonne Maison révèle que la colonne a été donné le type de données « DBTYPE_I4 », donc toutes les valeurs lues à partir de celui-ci sont interprétées comme entiers. Mon problème est que House doit être une chaîne - quand j'essaye de lire la valeur de House de la deuxième rangée, le OleDbDataReader renvoie la null.
Comment puis-je dire au fournisseur de base de données Jet ou à OleDbDataReader d'interpréter une colonne comme des chaînes plutôt que des nombres?
Ceci contournerait complètement le OleDbProvider, ce qui est probablement une bonne chose. Les valeurs renvoyées par 'record [" FieldName "]' sont toutes des chaînes - mon code devrait savoir à l'avance quel type de données est attendu de chaque colonne, et exécuter les chaînes via 'System.Convert'. –