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
Freigeben: 2025-01-15 15:31:42
Original
951 Leute haben es durchsucht

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:

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());
Nach dem Login kopieren

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

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());
Nach dem Login kopieren

.NET 4.0 und höher

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

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());
Nach dem Login kopieren

Umgang mit Sonderzeichen

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

foreach (DataRow row in dt.Rows)
{
    IEnumerable<string> fields = row.ItemArray.Select(field =>
        string.Concat("\"", field.ToString().Replace("\"", "\"\""), "\""));
    sb.AppendLine(string.Join(",", fields));
}
Nach dem Login kopieren

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!

Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage