Passer au contenu du pied de page
UTILISATION D'IRONXL

Comment lire un fichier CSV dans une DataTable en C#

Travailler avec des fichiers CSV est une tâche courante pour les développeurs .NET, que vous importiez des rapports de ventes, traitiez des stocks ou synchronisiez des enregistrements clients. Convertir un fichier CSV en DataTable facilite la manipulation, l'analyse ou l'insertion dans une table de base de données.

Lire des fichiers CSV en C# peut être délicat, des fichiers volumineux, différents délimiteurs ou des virgules intégrées nécessitent souvent un parsing complexe ou Excel. IronXL simplifie cela : avec seulement quelques lignes de code, vous pouvez lire des fichiers CSV depuis n'importe quel chemin de fichier, les convertir en une DataTable avec des en-têtes de colonne appropriés, et les préparer pour des opérations de base de données en masse - le tout sans Excel.

Dans ce guide, vous apprendrez comment :

  • Charger un fichier CSV dans une DataTable en C#
  • Gérer différents délimiteurs comme les virgules, les tabulations ou les points-virgules
  • Importer directement votre DataTable dans SQL Server de manière efficace
  • Gérer de grands ensembles de données de manière fiable sans rencontrer de problèmes de mémoire

À la fin, vous aurez un flux de travail complet et pratique pour transformer les données CSV en informations exploitables en utilisant IronXL dans vos applications .NET.

Pourquoi la conversion CSV en DataTable est-elle essentielle ?

La conversion CSV en DataTable permet aux développeurs de transformer des valeurs séparées par des virgules (données CSV) en objets structurés comme une DataTable pour un traitement ultérieur. Que vous traitiez des données d'inventaire, des enregistrements clients ou des journaux de transactions, être capable de convertir un CSV en une nouvelle DataTable efficacement est crucial. En utilisant la première ligne comme en-têtes de colonne, vous pouvez vous assurer que les colonnes de la datatable s'alignent avec le schéma de votre table de base de données.

Les approches traditionnelles rencontrent souvent des difficultés avec les fichiers volumineux, les différents délimiteurs ou la gestion de la mémoire. IronXL élimine ces défis et gère différents délimiteurs, champs entre guillemets et virgules intégrées en toute transparence. Les capacités de lecture CSV d'IronXL éliminent ces points de douleur courants.

Comment installer IronXL ?

Commencer avec IronXL nécessite juste une simple installation de package NuGet. Ouvrez la console du gestionnaire de packages NuGet dans Visual Studio et exécutez :

Install-Package IronXL.Excel

Une fois installé, ajoutez l'espace de noms IronXL à votre projet :

using IronXL;
using System.Data;
using IronXL;
using System.Data;
Imports IronXL
Imports System.Data
$vbLabelText   $csharpLabel

Cela vous donne accès à toutes les puissantes capacités de traitement CSV sans aucune dépendance Excel. Pour plus de détails sur l'API étendue d'IronXL, référez-vous à la Documentation de référence API.

NuGet Installer avec NuGet

PM >  Install-Package IronXL.Excel

Consultez IronXL sur NuGet pour une installation rapide. Avec plus de 10 millions de téléchargements, il transforme le développement PDF avec C#. Vous pouvez également télécharger le DLL.

Comment convertir un CSV en DataTable ?

La beauté d'IronXL réside dans sa simplicité. Voici comment lire un fichier CSV et le convertir en DataTable :

// Load CSV file into a WorkBook object
WorkBook workbook = WorkBook.LoadCSV("sales_data.csv", 
    fileFormat: ExcelFileFormat.XLSX);
// Access the default worksheet
WorkSheet worksheet = workbook.DefaultWorkSheet;
// Convert to DataTable with headers
DataTable dataTable = worksheet.ToDataTable(true);
// Display the data
foreach (DataRow row in dataTable.Rows)
{
    foreach (var item in row.ItemArray)
    {
        Console.Write($"{item}\t");
    }
    Console.WriteLine();
}
// Load CSV file into a WorkBook object
WorkBook workbook = WorkBook.LoadCSV("sales_data.csv", 
    fileFormat: ExcelFileFormat.XLSX);
// Access the default worksheet
WorkSheet worksheet = workbook.DefaultWorkSheet;
// Convert to DataTable with headers
DataTable dataTable = worksheet.ToDataTable(true);
// Display the data
foreach (DataRow row in dataTable.Rows)
{
    foreach (var item in row.ItemArray)
    {
        Console.Write($"{item}\t");
    }
    Console.WriteLine();
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

La méthode LoadCSV analyse intelligemment votre fichier CSV, gérant automatiquement les cas courants tels que les champs entre guillemets et les virgules intégrées. Le paramètre fileFormat indique à IronXL comment interpréter les données CSV en interne, garantissant qu'elles sont traitées comme une structure compatible avec Excel. Une fois chargé, la méthode ToDataTable(true) convertit la feuille de calcul en une DataTable, avec le paramètre true indiquant que la première ligne doit être utilisée comme en-têtes de colonne. Cela aboutit à une DataTable propre et structurée avec des colonnes nommées qui correspondent à vos en-têtes CSV. Pour plus d'options de manipulation avancées, explorez le didacticiel complet Excel vers DataTable.

Comment importer une DataTable dans SQL Server ?

Une fois que vous avez votre DataTable, l'importer dans SQL Server devient remarquablement efficace en utilisant SqlBulkCopy :

using System.Data;
using Microsoft.Data.SqlClient;
using IronXL;
class Program
{
    static void Main(string[] args)
    {
        // Create connection string
        string connectionString = @"Data Source=localhost;Initial Catalog=SalesDB;
                           Integrated Security=True;TrustServerCertificate=True;";
        // Read CSV into DataTable
        WorkBook workbook = WorkBook.LoadCSV("inventory_report.csv");
        DataTable dataTable = workbook.DefaultWorkSheet.ToDataTable(true);
        // Bulk insert into SQL Server
        using (SqlConnection connection = new SqlConnection(connectionString))
        {
            connection.Open();
            using (SqlBulkCopy bulkCopy = new SqlBulkCopy(connection))
            {
                // Set destination table name
                bulkCopy.DestinationTableName = "dbo.Inventory";
                // Map DataTable columns to SQL table columns
                bulkCopy.ColumnMappings.Add("ProductCode", "product_code");
                bulkCopy.ColumnMappings.Add("Quantity", "quantity");
                bulkCopy.ColumnMappings.Add("LastUpdated", "last_updated");
                // Set batch size for better performance
                bulkCopy.BatchSize = 1000;
                // Write data to SQL Server
                bulkCopy.WriteToServer(dataTable);
            }
        }
        Console.WriteLine($"Successfully imported {dataTable.Rows.Count} records");
    }
}
using System.Data;
using Microsoft.Data.SqlClient;
using IronXL;
class Program
{
    static void Main(string[] args)
    {
        // Create connection string
        string connectionString = @"Data Source=localhost;Initial Catalog=SalesDB;
                           Integrated Security=True;TrustServerCertificate=True;";
        // Read CSV into DataTable
        WorkBook workbook = WorkBook.LoadCSV("inventory_report.csv");
        DataTable dataTable = workbook.DefaultWorkSheet.ToDataTable(true);
        // Bulk insert into SQL Server
        using (SqlConnection connection = new SqlConnection(connectionString))
        {
            connection.Open();
            using (SqlBulkCopy bulkCopy = new SqlBulkCopy(connection))
            {
                // Set destination table name
                bulkCopy.DestinationTableName = "dbo.Inventory";
                // Map DataTable columns to SQL table columns
                bulkCopy.ColumnMappings.Add("ProductCode", "product_code");
                bulkCopy.ColumnMappings.Add("Quantity", "quantity");
                bulkCopy.ColumnMappings.Add("LastUpdated", "last_updated");
                // Set batch size for better performance
                bulkCopy.BatchSize = 1000;
                // Write data to SQL Server
                bulkCopy.WriteToServer(dataTable);
            }
        }
        Console.WriteLine($"Successfully imported {dataTable.Rows.Count} records");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

La classe SqlBulkCopy offre une performance exceptionnelle pour les importations de données à grande échelle. La collection ColumnMappings vous permet de mapper les colonnes de la DataTable aux colonnes de la base de données avec des noms différents, assurant une flexibilité dans votre schéma de données. La propriété BatchSize optimise l'utilisation de la mémoire en traitant les enregistrements par lots plutôt que de tout charger d'un coup. Cette approche peut gérer efficacement des millions d'enregistrements, ce qui la rend idéale pour les opérations de données à l'échelle de l'entreprise. En savoir plus sur les capacités d'IronXL en matière de DataSet et DataTable.

Sortie

Ici, nous pouvons utiliser la requête *SELECT FROM dbo.Inventory;** dans SSMS pour vérifier que nos données CSV ont réellement été importées dans le SQL Server. Tout d'abord, regardons les données que nous avons utilisées dans notre fichier CSV d'exemple :

Comment lire un fichier CSV dans une DataTable en C#: Figure 2 - Données CSV d'exemple

Maintenant, si vous regardez la sortie de notre requête, nous pouvons voir qu'elle a réussi à copier chaque colonne, en-tête et ligne dans la table de la base de données.

Comment lire un fichier CSV dans une DataTable en C#: Figure 3 - Vue de la base de données montrant les enregistrements importés

Comment gérer différents délimiteurs ?

Tous les fichiers CSV n'utilisent pas de virgules. IronXL gère en toute transparence divers délimiteurs :

using IronXL;
using System;
using System.Data;
using System.IO;
class Program
{
    static void Main()
    {
        // --- Tab-delimited file ---
        string tsvPath = @"export_data.tsv";
        WorkBook tsvWorkbook = WorkBook.LoadCSV(tsvPath, ExcelFileFormat.XLSX, "\t");
        // --- Semicolon-delimited file ---
        string semiPath = @"european_data.csv";
        string tempCsv = Path.Combine(Path.GetTempPath(), "european_data_comma.csv");
        // Replace semicolons with commas for proper parsing
        var lines = File.ReadAllLines(semiPath);
        for (int i = 0; i < lines.Length; i++)
        {
            lines[i] = lines[i].Replace(';', ',');
        }
        File.WriteAllLines(tempCsv, lines);
        WorkBook semiWorkbook = WorkBook.LoadCSV(tempCsv, ExcelFileFormat.XLSX);
        // Print both workbooks
        PrintWorkbook(tsvWorkbook, "Tab-delimited File");
        PrintWorkbook(semiWorkbook, "Semicolon-delimited File");
    }
    static void PrintWorkbook(WorkBook workbook, string name)
    {
        Console.WriteLine($"\n--- {name} ---\n");
        DataTable dt = workbook.DefaultWorkSheet.ToDataTable(true);
        // Print column headers
        foreach (DataColumn col in dt.Columns)
        {
            Console.Write($"{col.ColumnName}\t");
        }
        Console.WriteLine();
        // Print rows
        foreach (DataRow row in dt.Rows)
        {
            foreach (var item in row.ItemArray)
            {
                Console.Write($"{item}\t");
            }
            Console.WriteLine();
        }
    }
}
using IronXL;
using System;
using System.Data;
using System.IO;
class Program
{
    static void Main()
    {
        // --- Tab-delimited file ---
        string tsvPath = @"export_data.tsv";
        WorkBook tsvWorkbook = WorkBook.LoadCSV(tsvPath, ExcelFileFormat.XLSX, "\t");
        // --- Semicolon-delimited file ---
        string semiPath = @"european_data.csv";
        string tempCsv = Path.Combine(Path.GetTempPath(), "european_data_comma.csv");
        // Replace semicolons with commas for proper parsing
        var lines = File.ReadAllLines(semiPath);
        for (int i = 0; i < lines.Length; i++)
        {
            lines[i] = lines[i].Replace(';', ',');
        }
        File.WriteAllLines(tempCsv, lines);
        WorkBook semiWorkbook = WorkBook.LoadCSV(tempCsv, ExcelFileFormat.XLSX);
        // Print both workbooks
        PrintWorkbook(tsvWorkbook, "Tab-delimited File");
        PrintWorkbook(semiWorkbook, "Semicolon-delimited File");
    }
    static void PrintWorkbook(WorkBook workbook, string name)
    {
        Console.WriteLine($"\n--- {name} ---\n");
        DataTable dt = workbook.DefaultWorkSheet.ToDataTable(true);
        // Print column headers
        foreach (DataColumn col in dt.Columns)
        {
            Console.Write($"{col.ColumnName}\t");
        }
        Console.WriteLine();
        // Print rows
        foreach (DataRow row in dt.Rows)
        {
            foreach (var item in row.ItemArray)
            {
                Console.Write($"{item}\t");
            }
            Console.WriteLine();
        }
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Ce code charge des fichiers CSV avec différents délimiteurs dans des objets IronXL WorkBook. Les fichiers délimités par des tabulations sont lus en utilisant "\t" comme séparateur, tandis que les fichiers délimités par des points-virgules sont convertis en format CSV standard avant le chargement. La feuille de travail par défaut de chaque workbook est convertie en une DataTable avec ToDataTable(true), qui utilise la première ligne comme en-têtes de colonne.

La méthode PrintWorkbook parcourt ensuite la DataTable et affiche les données dans la console, y compris les en-têtes et toutes les lignes. Cette flexibilité répond à de nombreux défis courants de parsing CSV discutés par des développeurs.

Sortie

Comme vous pouvez le voir dans notre sortie console, les deux fichiers sont correctement formatés en tables de données, malgré le fait qu'ils aient commencé avec des délimiteurs différents.

Comment lire un fichier CSV dans une DataTable en C#: Figure 4 - Sortie avec différents délimiteurs

Conclusion

IronXL transforme la tâche complexe des importations de base de données CSV en un processus simple et fiable. Avec seulement quelques lignes de code, vous pouvez :

  • Lire des fichiers CSV depuis n'importe quel chemin de fichier
  • Convertir les données CSV en une nouvelle DataTable
  • Préserver les en-têtes de colonne et les colonnes de la DataTable
  • Importer des millions de lignes dans une table de base de données efficacement

La bibliothèque gère automatiquement les subtilités du parsing CSV, de la gestion de la mémoire et des conversions de types de données, vous permettant de vous concentrer sur votre logique métier plutôt que sur les détails du traitement des fichiers.

Prêt à rationaliser votre flux de travail d'importation de données ? Commencez votre essai gratuit pour trouver l'ajustement parfait aux besoins de votre équipe.

Questions Fréquemment Posées

Quel est le meilleur moyen de lire des fichiers CSV dans une DataTable en C#?

En utilisant IronXL, vous pouvez efficacement lire des fichiers CSV dans une DataTable en C# avec des exemples de code simples fournis dans notre guide du développeur.

Pourquoi devrais-je utiliser IronXL pour la conversion de CSV en DataTable?

IronXL offre une API simple pour analyser des fichiers CSV et les convertir en DataTables, vous permettant de manipuler et d'analyser facilement vos données en C#.

IronXL peut-il gérer de grands fichiers CSV lors de la conversion en DataTables?

Oui, IronXL est conçu pour traiter efficacement de grands fichiers CSV et les convertir en DataTables sans problèmes de performance.

IronXL prend-il en charge la manipulation des données après la conversion d'un CSV en DataTable?

Absolument, une fois que vous avez converti un fichier CSV en DataTable avec IronXL, vous pouvez facilement manipuler et analyser les données selon les besoins.

Comment puis-je importer des données CSV dans une base de données en utilisant IronXL?

Après avoir converti votre fichier CSV en DataTable avec IronXL, vous pouvez insérer les données dans une base de données en utilisant la connectivité standard des bases de données en C#.

IronXL est-il adapté au traitement des fichiers CSV dans les applications d'entreprise?

Oui, IronXL est conçu pour gérer les tâches de traitement de CSV dans les applications d'entreprise, offrant des performances et une fiabilité robustes.

Quels sont les avantages de convertir des fichiers CSV en DataTables en C#?

Convertir des fichiers CSV en DataTables permet une manipulation, une analyse et une intégration plus faciles avec les bases de données, améliorant les capacités de gestion des données de votre application.

IronXL peut-il être utilisé pour d'autres types de fichiers de feuille de calcul en dehors des CSV?

Oui, IronXL prend en charge divers types de fichiers de feuille de calcul, y compris les formats Excel, permettant des capacités polyvalentes de traitement des données en C#.

Jordi Bardia
Ingénieur logiciel
Jordi est le plus compétent en Python, C# et C++, et lorsqu'il ne met pas à profit ses compétences chez Iron Software, il programme des jeux. Partageant les responsabilités des tests de produit, du développement de produit et de la recherche, Jordi apporte une immense valeur à l'amé...
Lire la suite