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

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

Patricia Arquette
Libérer: 2025-01-15 15:31:42
original
951 Les gens l'ont consulté

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

Conversion de DataTable en CSV en C#

Lors de l'enregistrement des données DataTable dans un fichier CSV, vous pouvez rencontrer des problèmes de séparation incorrecte des données. Les solutions sont fournies ci-dessous :

Considérez le code suivant :

StringBuilder sb = new StringBuilder();
foreach (DataColumn col in dt.Columns)
{
    sb.Append(col.ColumnName + ',');
}
sb.Remove(sb.Length - 1, 1);
sb.Append(Environment.NewLine);

foreach (DataRow row in dt.Rows)
{
    // ... (此处代码仅写入每一行的第一个单元格数据) ...
}

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

Le fichier CSV créé par le code ci-dessus contient uniquement les données de la première cellule de chaque ligne. Pour résoudre ce problème, une approche plus robuste peut être utilisée :

.NET 3.5 et supérieur

StringBuilder sb = new StringBuilder();
string[] columnNames = dt.Columns.Cast<DataColumn>().Select(column => column.ColumnName).ToArray();
sb.AppendLine(string.Join(",", columnNames));

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

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

.NET 4.0 et supérieur

Pour .NET 4.0 et supérieur, le code peut être encore simplifié :

StringBuilder sb = new StringBuilder();
IEnumerable<string> columnNames = dt.Columns.Cast<DataColumn>().Select(column => column.ColumnName);
sb.AppendLine(string.Join(",", columnNames));

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());
Copier après la connexion

Gestion des caractères spéciaux

Si vous devez gérer des caractères spéciaux (tels que des guillemets doubles) dans le champ de données, vous pouvez modifier le bloc de boucle dans le code :

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

De plus, pour éviter des documents volumineux en mémoire, le contenu CSV peut être écrit ligne par ligne au lieu d'écrire l'intégralité du document en une seule fois.

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!

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal