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
Patricia Arquetteoriginal
2025-01-15 15:31:42862parcourir

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 :

<code class="language-csharp">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());</code>

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

<code class="language-csharp">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());</code>

.NET 4.0 et supérieur

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

<code class="language-csharp">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());</code>

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 :

<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>

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:
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