UTILISATION D'IRONXL

Comment lire les données d'un fichier CSV et les stocker dans une base de données C#

Publié janvier 27, 2024
Partager:

Dans le monde numérique d'aujourd'hui, le traitement efficace des données est une tâche importante. L'une des exigences les plus courantes en matière de développement de logiciels est la lecture de données à partir d'un fichier CSV et leur stockage dans une base de données. Ce tutoriel couvre les étapes permettant de lire les données d'un fichier CSV et de les stocker dans une base de données SQL Server à l'aide de C#, en particulier en utilisant la fonctionBibliothèque IronXL. Ce guide est destiné aux débutants et sera expliqué de manière simple et attrayante.

Comprendre les bases

*Qu'est-ce qu'un fichier CSV ?

UN CSV(Valeurs séparées par des virgules) est un fichier texte qui contient des données séparées par des virgules. Il s'agit d'un format populaire pour le transfert de données en raison de sa simplicité et de sa compatibilité avec diverses applications, telles qu'Excel.

Le rôle du serveur SQL et des bases de données

SQL Server est un système de gestion de base de données de Microsoft. Il est utilisé pour stocker et gérer des données de manière structurée. Dans notre cas, nous stockerons les données CSV dans une table SQL Server.

Introduction à IronXL

IronXL est une bibliothèque Excel adaptée aux applications .NET, spécifiquement conçue pour permettre aux développeurs de lire, générer et modifier des fichiers Excel sans avoir besoin de l'interopération Microsoft Office. Cette bibliothèque se distingue par sa compatibilité avec différentes versions et plateformes .NET, notamment .NET Core, .NET Standard et .NET Framework, ainsi que par sa prise en charge de différents systèmes d'exploitation tels que Windows, Linux et macOS. Il s'agit d'une bibliothèque puissante pour l'importation de données, en particulier pour la manipulation de fichiers CSV.

Comment lire et stocker des données à partir de fichiers CSV dans C# ;

  1. Créez un programme de console C# dans Visual Studio.

  2. Installez la bibliothèque CSV à l'aide du gestionnaire de paquets NuGet.

  3. Chargez le fichier CSV dans le programme à l'aide de la bibliothèque.

  4. Créer une connexion avec la base de données.

  5. Lire le contenu du fichier CSV à l'aide de la bibliothèque.

  6. Copiez ce contenu dans la base de données à l'aide de la méthode SqlBulkCopy.

    Voici un exemple de code :

using System;
using System.Data;
using System.Data.SqlClient;
using CsvHelper;

namespace CsvReader
{
    class Program
    {
        static void Main(string [] args)
        {
            string csvPath = @"path\to\your\csv\file.csv";

            using (var reader = new StreamReader(csvPath))
            using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
            {
                var records = csv.GetRecords<YourModel>();

                using (var sqlBulkCopy = new SqlBulkCopy("your_connection_string"))
                {
                    sqlBulkCopy.DestinationTableName = "YourTableName";
                    sqlBulkCopy.WriteToServer(records.AsDataReader());
                }

                Console.WriteLine("Data imported successfully!");
            }
        }
    }
}
using System;
using System.Data;
using System.Data.SqlClient;
using CsvHelper;

namespace CsvReader
{
    class Program
    {
        static void Main(string [] args)
        {
            string csvPath = @"path\to\your\csv\file.csv";

            using (var reader = new StreamReader(csvPath))
            using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
            {
                var records = csv.GetRecords<YourModel>();

                using (var sqlBulkCopy = new SqlBulkCopy("your_connection_string"))
                {
                    sqlBulkCopy.DestinationTableName = "YourTableName";
                    sqlBulkCopy.WriteToServer(records.AsDataReader());
                }

                Console.WriteLine("Data imported successfully!");
            }
        }
    }
}
Imports System
Imports System.Data
Imports System.Data.SqlClient
Imports CsvHelper

Namespace CsvReader
	Friend Class Program
		Shared Sub Main(ByVal args() As String)
			Dim csvPath As String = "path\to\your\csv\file.csv"

			Using reader = New StreamReader(csvPath)
			Using csv = New CsvReader(reader, CultureInfo.InvariantCulture)
				Dim records = csv.GetRecords(Of YourModel)()

				Using sqlBulkCopy As New SqlBulkCopy("your_connection_string")
					sqlBulkCopy.DestinationTableName = "YourTableName"
					sqlBulkCopy.WriteToServer(records.AsDataReader())
				End Using

				Console.WriteLine("Data imported successfully!")
			End Using
			End Using
		End Sub
	End Class
End Namespace
VB   C#

Veillez à remplacer "pathto\yourcsv\file.csv" par le chemin réel de votre fichier CSV, "YourModel" par le modèle représentant vos données CSV, "your_connection_string" par la chaîne de connexion à votre base de données et "YourTableName" par le nom de votre table de base de données.

Mise en place de l'environnement

Conditions préalables

  1. Visual Studio : Assurez-vous que Visual Studio est installé.

  2. SQL Server : SQL Server doit être installé et accessible.

  3. Installation d'IronXL : Installez IronXL en exécutant la commande NuGet suivante :
Install-Package IronXL.Excel

ou

dotnet add package IronXL

Veillez à exécuter ces commandes dans le répertoire du projet où vous souhaitez installer IronXL.

Création d'une table SQL Server

Avant d'importer des données, créez une table de destination dans votre base de données SQL Server. Ce tableau stocke les données CSV.

CREATE TABLE YourTableName (
    Column1 DataType,
    Column2 DataType,
    ...
);

Remplacez VotreNomDeTable, Colonne1, Colonne2, et TypeDeDonnées par vos données spécifiques.

Guide étape par étape pour importer des données CSV

  1. Tout d'abord, assurez-vous que vous disposez d'un fichier CSV contenant les données que vous souhaitez importer.

  2. Créez un nouveau projet d'application console C# dans Visual Studio.

  3. Installez le paquet NuGet CsvHelper pour lire les fichiers CSV. Pour ce faire, ouvrez la console NuGet Package Manager dans Visual Studio et exécutez la commande suivante :
    :installCmd Install-Package CsvHelper
  1. Ajoutez les instructions d'utilisation nécessaires au début de votre fichier de code C# :
    using System;
    using System.IO;
    using CsvHelper;
    using System;
    using System.IO;
    using CsvHelper;
Imports System
	Imports System.IO
	Imports CsvHelper
VB   C#
  1. Dans votre code, indiquez le chemin d'accès à votre fichier CSV. Par exemple, dans votre code, indiquez le chemin d'accès à votre fichier CSV :
    string csvFilePath = @"C:\path\to\your\csv\file.csv";
    string csvFilePath = @"C:\path\to\your\csv\file.csv";
Dim csvFilePath As String = "C:\path\to\your\csv\file.csv"
VB   C#

Assurez-vous de remplacer C:\path\your\csv\file.csv par le chemin réel de votre fichier CSV.

  1. Créer une nouvelle instance de la classe StreamReader pour lire le fichier CSV :
    using (var reader = new StreamReader(csvFilePath))
    {
        // code goes here
    }
    using (var reader = new StreamReader(csvFilePath))
    {
        // code goes here
    }
IRON VB CONVERTER ERROR developers@ironsoftware.com
VB   C#
  1. Crée une nouvelle instance de la classe CsvReader, en lui passant l'objet StreamReader :
    using (var reader = new StreamReader(csvFilePath))
    using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
    {
        // code goes here
    }
    using (var reader = new StreamReader(csvFilePath))
    using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
    {
        // code goes here
    }
IRON VB CONVERTER ERROR developers@ironsoftware.com
VB   C#
  1. Optionnellement, configurer l'objet CsvReader avec les paramètres nécessaires. Par exemple :
    csv.Configuration.HasHeaderRecord = true;
    csv.Configuration.HasHeaderRecord = true;
csv.Configuration.HasHeaderRecord = True
VB   C#
  1. Utilisez la fonction GetRecords<T>() de l'objet CsvReader pour lire les données CSV dans une collection d'objets. Remplacer <T> avec le type d'objet qui représente chaque enregistrement dans le fichier CSV. Par exemple :
    var records = csv.GetRecords<YourModel>();
    var records = csv.GetRecords<YourModel>();
Dim records = csv.GetRecords(Of YourModel)()
VB   C#

Veillez à remplacer VotreModèle par le nom réel de votre classe de modèle.

  1. Passer en revue les enregistrements et effectuer les traitements ou validations nécessaires :
    foreach (var record in records)
    {
        // code goes here
    }
    foreach (var record in records)
    {
        // code goes here
    }
IRON VB CONVERTER ERROR developers@ironsoftware.com
VB   C#
  1. Si vous le souhaitez, établissez une connexion à votre base de données SQL Server en utilisant ADO.NET ou un outil ORM comme Entity Framework.

  2. Insérez chaque enregistrement dans la base de données en utilisant le mécanisme d'accès à la base de données que vous avez choisi. Par exemple, si vous utilisez ADO.NET, vous pouvez tirer parti de la classe SqlBulkCopy pour insérer efficacement les données en masse.

  3. Gérer les exceptions qui peuvent survenir au cours du processus d'importation et fournir les messages d'erreur ou la journalisation appropriés.

  4. Testez votre application en l'exécutant et en vérifiant que les données CSV sont bien importées dans votre base de données.

    C'est tout! Vous avez maintenant réussi à importer des données CSV dans votre base de données SQL Server à l'aide de C#.

Étape 1 : Lecture du fichier CSV

Lorsque l'on commence à importer des données à partir d'un fichier CSV, la première étape cruciale consiste à lire avec précision les données qu'il contient. Chaque ligne d'un fichier CSV représente généralement un enregistrement de données, et chaque enregistrement se compose d'un ou plusieurs champs, séparés par des virgules.

Nous utilisons ensuite la bibliothèque IronXL pour traiter le fichier CSV. Pour lire le fichier CSV à l'aide d'IronXL, vous utiliserez ses classes WorkBook et WorkSheet. La classe WorkBook représente une feuille de calcul entière, qui peut être un fichier Excel ou, dans notre cas, un fichier CSV. Lorsque vous chargez le chemin du fichier CSV dans un objet WorkBook, IronXL traite le fichier CSV comme une feuille de calcul/tableau de données.

using IronXL;
public class CSVReader
{
    public DataTable ReadCSV(string filePath)
    {
        WorkBook workbook = WorkBook.Load(filePath);
        WorkSheet sheet = workbook.DefaultWorkSheet;
        // Convert to DataTable for easier processing
        DataTable dataTable = sheet.ToDataTable(true); // Set to 'true' if your CSV has a header row
        return dataTable;
    }
}
using IronXL;
public class CSVReader
{
    public DataTable ReadCSV(string filePath)
    {
        WorkBook workbook = WorkBook.Load(filePath);
        WorkSheet sheet = workbook.DefaultWorkSheet;
        // Convert to DataTable for easier processing
        DataTable dataTable = sheet.ToDataTable(true); // Set to 'true' if your CSV has a header row
        return dataTable;
    }
}
Imports IronXL
Public Class CSVReader
	Public Function ReadCSV(ByVal filePath As String) As DataTable
		Dim workbook As WorkBook = WorkBook.Load(filePath)
		Dim sheet As WorkSheet = workbook.DefaultWorkSheet
		' Convert to DataTable for easier processing
		Dim dataTable As DataTable = sheet.ToDataTable(True) ' Set to 'true' if your CSV has a header row
		Return dataTable
	End Function
End Class
VB   C#

Étape 2 : Établissement d'une connexion à la base de données

L'établissement d'une connexion à votre base de données SQL Server est une étape fondamentale dans le processus de stockage de vos données CSV. Cette étape consiste à établir un lien de communication entre votre application et le serveur de base de données. Une connexion réussie est cruciale car, sans elle, le transfert de données vers la base de données serait impossible.

Cette étape porte sur la création et l'ouverture d'une connexion à l'aide d'une chaîne de connexion en C#. La chaîne de connexion est un élément essentiel car elle contient les informations nécessaires à l'établissement de la connexion. C'est comme une clé qui ouvre la porte de votre base de données.

public class DatabaseConnector
{
    private string connectionString = "your_connection_string_here";

    public SqlConnection ConnectToDatabase()
    {
        SqlConnection connection = new SqlConnection(connectionString);
        connection.Open();
        return connection;
    }
}
public class DatabaseConnector
{
    private string connectionString = "your_connection_string_here";

    public SqlConnection ConnectToDatabase()
    {
        SqlConnection connection = new SqlConnection(connectionString);
        connection.Open();
        return connection;
    }
}
Public Class DatabaseConnector
	Private connectionString As String = "your_connection_string_here"

	Public Function ConnectToDatabase() As SqlConnection
		Dim connection As New SqlConnection(connectionString)
		connection.Open()
		Return connection
	End Function
End Class
VB   C#

La variable connectionString contient tous les détails nécessaires pour se connecter à votre serveur SQL. Il comprend généralement le nom du serveur, le nom de la base de données, l'identifiant de l'utilisateur et le mot de passe. Un exemple de chaîne de connexion ressemble à ceci : Server=monadresseServer;Database=monDataBase;User Id=monnomd'utilisateur;Password=monmotdepasse;. Il est essentiel de remplacer ces espaces réservés par les données réelles de votre serveur.

Étape 3 : Stockage des données dans la base de données

Après avoir établi une connexion avec la base de données SQL Server, l'étape critique suivante consiste à stocker les données CSV dans la base de données. Cette étape consiste à transférer les données que vous avez lues et traitées dans votre table SQL Server. Il s'agit d'une partie cruciale du processus de traitement des données, car elle implique la migration réelle des données d'un fichier local vers un serveur de base de données.

Dans cette étape, nous nous concentrerons sur la manière dont les données CSV, désormais stockées dans une Table de données, sont transférées vers la base de données du serveur SQL. Nous utilisons une combinaison de fonctions C# et SQL Server pour accomplir cette tâche efficacement.

public class DataImporter
{
    public void ImportData(DataTable dataTable)
    {
        using (SqlConnection connection = new DatabaseConnector().ConnectToDatabase())
        {
            // Check if the table exists and create it if it does not.
            string tableName = "CSVData"; // Use a valid SQL table name format
            string checkTable = $"IF NOT EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = '{tableName}') BEGIN ";
            string createTable = "CREATE TABLE " + tableName + " (";
            for (int i = 0; i < dataTable.Columns.Count; i++)
            {
                createTable += $"[{dataTable.Columns [i].ColumnName}] NVARCHAR(MAX)";
                if (i < dataTable.Columns.Count - 1)
                    createTable += ", ";
            }
            createTable += ") END";
            SqlCommand createTableCommand = new SqlCommand(checkTable + createTable, connection);
            createTableCommand.ExecuteNonQuery();

            // Now we use SqlBulkCopy to import the data
            using (SqlBulkCopy bulkCopy = new SqlBulkCopy(connection))
            {
                bulkCopy.DestinationTableName = tableName;
                try
                {
                    bulkCopy.WriteToServer(dataTable);
                    Console.WriteLine("Data imported successfully!");
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.Message);
                }
            }
        }
    }
}
public class DataImporter
{
    public void ImportData(DataTable dataTable)
    {
        using (SqlConnection connection = new DatabaseConnector().ConnectToDatabase())
        {
            // Check if the table exists and create it if it does not.
            string tableName = "CSVData"; // Use a valid SQL table name format
            string checkTable = $"IF NOT EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = '{tableName}') BEGIN ";
            string createTable = "CREATE TABLE " + tableName + " (";
            for (int i = 0; i < dataTable.Columns.Count; i++)
            {
                createTable += $"[{dataTable.Columns [i].ColumnName}] NVARCHAR(MAX)";
                if (i < dataTable.Columns.Count - 1)
                    createTable += ", ";
            }
            createTable += ") END";
            SqlCommand createTableCommand = new SqlCommand(checkTable + createTable, connection);
            createTableCommand.ExecuteNonQuery();

            // Now we use SqlBulkCopy to import the data
            using (SqlBulkCopy bulkCopy = new SqlBulkCopy(connection))
            {
                bulkCopy.DestinationTableName = tableName;
                try
                {
                    bulkCopy.WriteToServer(dataTable);
                    Console.WriteLine("Data imported successfully!");
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.Message);
                }
            }
        }
    }
}
Public Class DataImporter
	Public Sub ImportData(ByVal dataTable As DataTable)
		Using connection As SqlConnection = (New DatabaseConnector()).ConnectToDatabase()
			' Check if the table exists and create it if it does not.
			Dim tableName As String = "CSVData" ' Use a valid SQL table name format
			Dim checkTable As String = $"IF NOT EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = '{tableName}') BEGIN "
			Dim createTable As String = "CREATE TABLE " & tableName & " ("
			For i As Integer = 0 To dataTable.Columns.Count - 1
				createTable &= $"[{dataTable.Columns (i).ColumnName}] NVARCHAR(MAX)"
				If i < dataTable.Columns.Count - 1 Then
					createTable &= ", "
				End If
			Next i
			createTable &= ") END"
			Dim createTableCommand As New SqlCommand(checkTable & createTable, connection)
			createTableCommand.ExecuteNonQuery()

			' Now we use SqlBulkCopy to import the data
			Using bulkCopy As New SqlBulkCopy(connection)
				bulkCopy.DestinationTableName = tableName
				Try
					bulkCopy.WriteToServer(dataTable)
					Console.WriteLine("Data imported successfully!")
				Catch ex As Exception
					Console.WriteLine(ex.Message)
				End Try
			End Using
		End Using
	End Sub
End Class
VB   C#

Il commence par ouvrir une connexion à la base de données du serveur SQL à l'aide de la classe DatabaseConnector, ce qui garantit un chemin pour les transactions de données. La méthode vérifie l'existence de la table "CSVData" dans la base de données.

Si la table n'est pas trouvée, il procède à sa création. Le schéma de la table est construit sur la base du schéma DataTable transmis à la méthode, toutes les colonnes étant définies comme NVARCHAR(MAX) pour accueillir toutes les données textuelles. Il s'agit d'une approche générique qui peut être affinée pour correspondre plus étroitement à des types de données spécifiques.

Ensuite, une commande SQL est formulée et exécutée pour vérifier l'existence de la table ou pour la créer. Cela garantit que l'opération de copie en bloc suivante dispose d'une table de destination prête pour l'insertion des données. Une fois la table prête, la classe SqlBulkCopy est utilisée pour transférer les données de la Table de données directement dans la table du serveur SQL. Cette opération est conçue pour des transferts de données en vrac très performants, ce qui permet de traiter efficacement de grands volumes de données.

Étape 4 : Assembler le tout

Après avoir travaillé avec diligence sur les premières étapes de la lecture des données CSV, de l'établissement d'une connexion à la base de données et de la préparation du transfert des données, nous arrivons à l'étape finale et cruciale : l'intégration de ces composants individuels dans un processus cohérent.

Cette intégration se fait dans la méthode Main de votre application C#, où tout est réuni, permettant l'exécution réelle de l'importation des données du fichier CSV vers la base de données du serveur SQL.

class Program
{
    static void Main(string [] args)
    {
        string filePath = "path_to_your_csv_file.csv";
        CSVReader reader = new CSVReader();
        DataTable dataTable = reader.ReadCSV(filePath);
        DataImporter importer = new DataImporter();
        importer.ImportData(dataTable);
        Console.WriteLine("Data imported successfully!");
    }
}
class Program
{
    static void Main(string [] args)
    {
        string filePath = "path_to_your_csv_file.csv";
        CSVReader reader = new CSVReader();
        DataTable dataTable = reader.ReadCSV(filePath);
        DataImporter importer = new DataImporter();
        importer.ImportData(dataTable);
        Console.WriteLine("Data imported successfully!");
    }
}
Friend Class Program
	Shared Sub Main(ByVal args() As String)
		Dim filePath As String = "path_to_your_csv_file.csv"
		Dim reader As New CSVReader()
		Dim dataTable As DataTable = reader.ReadCSV(filePath)
		Dim importer As New DataImporter()
		importer.ImportData(dataTable)
		Console.WriteLine("Data imported successfully!")
	End Sub
End Class
VB   C#

Remplacez chemin_de_votre_fichier_csv.csv par le chemin de votre fichier CSV.

Exécution du projet

Une fois le projet exécuté, vous obtiendrez le résultat suivant. Les messages de réussite indiquent que toutes les opérations ont été exécutées avec succès et que les données ont été copiées dans la base de données.

Data imported successfully!

Vous pouvez maintenant ouvrir SQL Server Management Studio(SSMS) et vérifiez la table sous la base de données. Les données suivantes apparaissent dans le tableau.

Comment lire les données d'un fichier CSV et les stocker dans une base de données C# : Figure 1 - Base de données de sortie

Conclusion

Ce tutoriel vous a guidé tout au long du processus de lecture des données d'un fichier CSV et de leur stockage dans une base de données SQL Server à l'aide de C#. En suivant ces étapes et en utilisant la bibliothèque IronXL, vous pouvez gérer efficacement les données CSV dans vos applications C#.

IronXL offre uneessai gratuit pour que les utilisateurs puissent découvrir ses fonctionnalités avant de s'engager dans un achat. Cet essai entièrement fonctionnel permet aux utilisateurs potentiels de tester et d'évaluer le produit dans un environnement réel sans aucun filigrane dans la production. Après la période d'essai, si vous décidez de continuer à utiliser IronXL pour vos projets, la licence du produit commence à partir de $749.

< PRÉCÉDENT
Comment exporter une grille de données vers Excel en C#
SUIVANT >
Comment convertir un fichier Excel en XML en C#