Comment transformer un fichier texte CSV en base de données(1)

21. March 2010 by Alexandre.FROMAGE

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.

ADO.NET, C# , ,

Add comment




  Country flag

biuquote
  • Comment
  • Preview
Loading

captcha

*