Heim >Backend-Entwicklung >C++ >Wie konvertiert man eine Datentabelle effizient in eine CSV-Datei in C#?

Wie konvertiert man eine Datentabelle effizient in eine CSV-Datei in C#?

Patricia Arquette
Patricia ArquetteOriginal
2025-01-15 15:31:42862Durchsuche

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

Konvertierung von DataTable in CSV in C#

Beim Speichern von DataTable-Daten in einer CSV-Datei können Probleme mit falscher Datentrennung auftreten. Nachfolgend finden Sie Lösungen:

Bedenken Sie den folgenden Code:

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

Die mit dem obigen Code erstellte CSV-Datei enthält nur Daten für die erste Zelle jeder Zeile. Um dieses Problem zu lösen, kann ein robusterer Ansatz verwendet werden:

.NET 3.5 und höher

<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 und höher

Für .NET 4.0 und höher kann der Code weiter vereinfacht werden:

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

Umgang mit Sonderzeichen

Wenn Sie Sonderzeichen (z. B. doppelte Anführungszeichen) im Datenfeld verarbeiten müssen, können Sie den Schleifenblock im Code ändern:

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

Um außerdem große Dokumente im Speicher zu vermeiden, kann der CSV-Inhalt Zeile für Zeile geschrieben werden, anstatt das gesamte Dokument auf einmal zu schreiben.

Das obige ist der detaillierte Inhalt vonWie konvertiert man eine Datentabelle effizient in eine CSV-Datei in C#?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn