Maison > développement back-end > C++ > Comment convertir correctement un DataTable en fichier CSV en C# ?

Comment convertir correctement un DataTable en fichier CSV en C# ?

Barbara Streisand
Libérer: 2025-01-15 15:41:44
original
452 Les gens l'ont consulté

How to Correctly Convert a DataTable to a CSV File in C#?

Convertir efficacement des DataTables en fichiers CSV en C#

Transformer un DataTable en fichier CSV est une opération fréquente en informatique. Cependant, une mauvaise manipulation peut entraîner une corruption des données, entraînant souvent des valeurs concaténées dans la première cellule de chaque ligne. Ce guide montre la bonne approche, en évitant les pièges courants.

Résolution des erreurs courantes :

Une erreur courante consiste à ajouter des virgules supplémentaires à la fin de chaque ligne, ce qui entraîne un désalignement des données. Cet exemple évite ce problème.

Mise en œuvre optimale :

Pour .NET 4.0 et versions ultérieures :

Cet extrait de code optimisé convertit efficacement un DataTable en fichier CSV :

<code class="language-csharp">StringBuilder sb = new StringBuilder();
sb.AppendLine(string.Join(",", dt.Columns.Cast<DataColumn>().Select(column => column.ColumnName)));

foreach (DataRow row in dt.Rows)
{
    IEnumerable<string> fields = row.ItemArray.Select(field => field.ToString());
    sb.AppendLine(string.Join(",", fields));
}

File.WriteAllText("test.csv", sb.ToString());</code>
Copier après la connexion

Gestion des caractères spéciaux (par exemple, des virgules dans les champs) :

Pour éviter la corruption des données causée par des caractères spéciaux tels que des virgules dans les champs de données, utilisez cette méthode améliorée :

<code class="language-csharp">foreach (DataRow row in dt.Rows)
{
    IEnumerable<string> fields = row.ItemArray.Select(field =>
      string.Concat("\"", field.ToString().Replace("\"", "\"\""), "\""));
    sb.AppendLine(string.Join(",", fields));
}</code>
Copier après la connexion

Ce code entoure chaque champ entre guillemets doubles et échappe à tous les guillemets doubles existants dans les champs.

Gestion améliorée de la mémoire : écriture ligne par ligne :

Pour les DataTables extrêmement volumineux, l'écriture du CSV ligne par ligne améliore l'efficacité de la mémoire :

<code class="language-csharp">using (var writer = new StreamWriter("test.csv"))
{
    writer.WriteLine(string.Join(",", dt.Columns.Cast<DataColumn>().Select(column => column.ColumnName)));
    foreach (DataRow row in dt.Rows)
    {
        writer.WriteLine(string.Join(",", row.ItemArray.Select(field => string.Concat("\"", field.ToString().Replace("\"", "\"\""), "\""))));
    }
}</code>
Copier après la connexion

Cette approche évite de charger l'intégralité du CSV en mémoire en une seule fois, ce qui le rend adapté à la gestion d'ensembles de données volumineux. N'oubliez pas d'inclure les déclarations using nécessaires pour System.Data, System.IO, System.Linq et System.Text.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal