Récemment, j’ai du travailler sur une application qui devait traiter des données issues d’un fichier texte CSV (comma-separated values).
Pour des applications stockant peu de données et avec un modèle de données simple, l’utilisation d’une base de données relationnelle n’est souvent pas nécessaire.
Dans ce premier article, je vous expliquerai comment ADO.NET nous permet de communiquer avec un fichier texte, pour stocker des données.
Pour cela, il existe deux méthodes :
- Lire le fichier texte à l’aide de StreamReader puis le parser.
- Utiliser le fournisseur de données OLEDB avec ADO.NET.
Utiliser OLEDB simplifie grandement la manipulation des données stockées dans le fichier texte et nous permet d’être indépendants du format utilisé (SQL server, feuille excel, fichier texte…).
Dans cet article, nous allons voir comment utiliser un fichier texte CSV au travers d’OLEDB pour le stockage de nos données.
1. Le fichier CSV : Comma-Separated Values
En pratique, le séparateur peut être n’importe quel caractère.
Pour cet article, le fichier utilisé est le suivant :
IdUser,FirstName,LastName,Mail,BirthDate
0,John,Dubois,jdubois@alexandrefromage.fr,06/11/1989
1,Pierre,Duchamps,pduchamps@alexandrefromage.fr,07/12/1980
2,Paul,Dujardin,pdujardin@alexandrefromage.fr,23/01/2000
3,Henri,Dès,hdes@alexandrefromage.fr,15/02/1997
189,Alexandre,Dufort,adufort@alexandrefromage.fr,15/01/1960
12,Loïc,Dumaison,ldumaison@alexandrefromage.fr,19/06/1945
2. Lecture de données dans un fichier texte CSV avec ADO.NET
//Connection string
string connectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" +
"C:/Users/Alexandre/Desktop/;Extended Properties=\"text;HDR=Yes;FMT=Delimited\";";
//Nom du fichier csv
string fileName = "testHeaders.csv";
//On initialise la connection
OleDbConnection connection = new
OleDbConnection()
{
ConnectionString = connectionString
};
//On prépare la requête sql
OleDbCommand command = new
OleDbCommand()
{
CommandType = System.Data.CommandType.Text,
CommandText = "SELECT * FROM " + fileName,
Connection = connection
};
//Data reader
OleDbDataReader reader;
//La connexion est automatiquement fermée à la fin du using
using (connection)
{
//Ouverture de la connexion
connection.Open();
reader = command.ExecuteReader();
//On lit les enregistrements ligne par ligne
while (reader.Read())
{
//Si on utilise la ligne de header
Console.WriteLine(reader["IdUser"] + " " + reader["FirstName"]);
//Sans header ? décommenter la ligne suivante
//Console.WriteLine(reader[0] + " " + reader[1]);
}
}
On obtient :

Ici, rien de compliqué. Le plus intéressant se concentre dans la chaine de connexion :
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:/Users/Alexandre/Desktop/;Extended Properties=\"text;HDR=Yes;FMT=Delimited\";"
Data Source: répertoire du fichier csv.
HDR indique si la première ligne du fichier CSV est le header(Yes) ou une ligne de données(No).
FMT indique comment les données sont séparées : « Delimited » si les colonnes sont séparées par une virgule ou « Fixed » si chaque colonne a une dimension. Dans ce dernier cas, il faut utiliser « Schema.ini » pour spécifier la taille des colonnes.
Schema.ini vous permet de spécifier :
-le nom du fichier texte
-le séparateur utilisé (format)
-les noms, tailles et longueur des champs des colonnes
Plus d’informations ici.
Dans le prochain article, nous créerons une classe générique, utilisant la réflexion, qui nous simplifiera la manipulation de fichiers CSV.