Inhaltsverzeichnis
- Warum DataTable in C# in CSV exportieren
- Methode 1: Manuelle C# DataTable-zu-CSV-Konvertierung mit StringBuilder
- Methode 2: Großer C# DataTable-zu-CSV-Export mit StreamWriter
- Methode 3: Spire.XLS for .NET verwenden, um DataTable in C# in CSV zu konvertieren
- Leistungsvergleich der DataTable-zu-CSV-Methoden
- Welche Methode sollten Sie verwenden?
- Umgang mit Sonderfällen und Best Practices für DataTable zu CSV
- Fazit
- FAQs
Mit Pypi installieren
Install-Package Spire.XLS
Verwandte Links

Das Exportieren von DataTable in CSV in C# ist eine häufige Anforderung für Entwickler, die tabellarische Daten effizient speichern, teilen oder analysieren müssen. Das DataTable-Objekt in .NET bietet eine strukturierte Möglichkeit, Zeilen und Spalten im Speicher abzulegen, aber oft müssen Sie diese Daten für Excel, Reporting-Tools oder andere Systeme in eine CSV-Datei konvertieren.
Dieses Tutorial erklärt drei einfache Methoden zum Exportieren von DataTable in CSV in C#, komplett mit Schritt-für-Schritt-Anleitungen und praktischen Codebeispielen. Egal, ob Sie mit kleinen Datensätzen oder großen Tabellen auf Produktionsebene arbeiten, diese Ansätze helfen Ihnen, die DataTable-zu-CSV-Konvertierung in C# schnell und zuverlässig durchzuführen.
Inhaltsverzeichnis
- Warum DataTable in C# in CSV exportieren
- Methode 1: Manuelle C# DataTable-zu-CSV-Konvertierung mit StringBuilder
- Methode 2: Großer C# DataTable-zu-CSV-Export mit StreamWriter
- Methode 3: Spire.XLS for .NET verwenden, um DataTable in C# in CSV zu konvertieren
- Leistungsvergleich der DataTable-zu-CSV-Methoden
- Welche Methode sollten Sie verwenden?
- Umgang mit Sonderfällen und Best Practices für DataTable zu CSV
- Fazit
- FAQs
Warum DataTable in C# in CSV exportieren
Das Exportieren einer DataTable in CSV in C# bietet mehrere entscheidende Vorteile:
- Universelles Datenformat – CSV wird von Excel, Google Sheets, Datenbanken und vielen Anwendungen unterstützt.
- Lesbar und einfach – Im Gegensatz zu JSON oder XML ist CSV menschenlesbar und einfach manuell zu bearbeiten.
- Nahtlose Integration – Viele Unternehmensanwendungen, CRMs und Reporting-Tools akzeptieren CSV-Dateien.
- Schnelle Leistung – Die CSV-Generierung ist leichtgewichtig und effizient.
- Plattformübergreifende Kompatibilität – CSV-Dateien können auf jedem System geöffnet und verarbeitet werden.
Methode 1: Manuelle C# DataTable-zu-CSV-Konvertierung mit StringBuilder
Der manuelle Export einer DataTable in CSV in C# mit StringBuilder gibt Ihnen die volle Kontrolle über Formatierungs- und Escaping-Regeln und ist daher ideal für kleine bis mittlere Datensätze.
Schritte zur Konvertierung von DataTable in CSV in C# mit StringBuilder
- Erstellen oder holen Sie eine DataTable aus Ihrer Quelle (Datenbank, API oder manuell).
- Initialisieren Sie einen StringBuilder, um den CSV-Inhalt zu speichern.
- Fügen Sie Spaltenüberschriften hinzu, indem Sie DataTable.Columns durchlaufen.
- Durchlaufen Sie die DataTable-Zeilen und fügen Sie den Wert jeder Zelle hinzu.
- Maskieren Sie Sonderzeichen wie Kommas, Anführungszeichen oder Zeilenumbrüche.
- Schreiben Sie die endgültige Zeichenfolge mit File.WriteAllText in eine CSV-Datei.
Beispielcode
using System;
using System.Data;
using System.IO;
using System.Text;
namespace DataTableToCSV
{
internal class Program
{
static void Main(string[] args)
{
// -------------------------------
// Schritt 1: Eine DataTable erstellen
// -------------------------------
DataTable table = new DataTable("Employees");
// Spalten definieren: ID, Name, Department, Salary, JoinDate, Email
table.Columns.Add("ID", typeof(int));
table.Columns.Add("Name", typeof(string));
table.Columns.Add("Department", typeof(string));
table.Columns.Add("Salary", typeof(decimal));
table.Columns.Add("JoinDate", typeof(DateTime));
table.Columns.Add("Email", typeof(string));
// Beispielzeilen mit reichhaltigeren Daten hinzufügen
table.Rows.Add(1, "Alice Johnson", "HR", 60000, new DateTime(2019, 3, 15), "alice.johnson@example.com");
table.Rows.Add(2, "Bob Smith", "IT", 75000, new DateTime(2018, 7, 22), "bob.smith@example.com");
table.Rows.Add(3, "Charlie Brown", "Finance", 82000, new DateTime(2020, 1, 10), "charlie.brown@example.com");
table.Rows.Add(4, "Diana Prince", "Marketing", 67000, new DateTime(2021, 5, 5), "diana.prince@example.com");
table.Rows.Add(5, "Ethan Hunt", "Operations", 90000, new DateTime(2017, 9, 30), "ethan.hunt@example.com");
table.Rows.Add(6, "Fiona Gallagher", "IT", 72000, new DateTime(2019, 11, 12), "fiona.gallagher@example.com");
// -------------------------------
// Schritt 2: DataTable in CSV exportieren
// -------------------------------
string csvPath = "employees.csv";
DataTableToCsv(table, csvPath);
Console.WriteLine($"CSV-Datei erfolgreich erstellt: {csvPath}");
}
/// <summary>
/// Konvertiert eine DataTable in eine CSV-Datei.
/// </summary>
/// <param name="dt">Die zu exportierende DataTable</param>
/// <param name="filePath">Der Pfad, unter dem die CSV-Datei gespeichert wird</param>
public static void DataTableToCsv(DataTable dt, string filePath)
{
// StringBuilder verwenden, um CSV-Inhalt effizient zu erstellen
StringBuilder sb = new StringBuilder();
// -------------------------------
// Schritt 1: Spaltenüberschriften hinzufügen
// -------------------------------
for (int i = 0; i < dt.Columns.Count; i++)
{
sb.Append(dt.Columns[i].ColumnName);
if (i < dt.Columns.Count - 1) sb.Append(","); // Komma hinzufügen, außer bei der letzten Spalte
}
sb.AppendLine();
// -------------------------------
// Schritt 2: Zeilen hinzufügen
// -------------------------------
foreach (DataRow row in dt.Rows)
{
for (int i = 0; i < dt.Columns.Count; i++)
{
string value;
// DateTime-Spalten als "yyyy-MM-dd" formatieren
if (dt.Columns[i].DataType == typeof(DateTime))
{
value = ((DateTime)row[i]).ToString("yyyy-MM-dd");
}
else
{
value = row[i].ToString();
}
// Sonderzeichen maskieren: Kommas, Anführungszeichen, Zeilenumbrüche
if (value.Contains(",") || value.Contains("\"") || value.Contains("\n"))
{
value = "\"" + value.Replace("\"", "\"\"") + "\"";
}
sb.Append(value);
if (i < dt.Columns.Count - 1) sb.Append(",");
}
sb.AppendLine();
}
// -------------------------------
// Schritt 3: CSV-Datei schreiben
// -------------------------------
File.WriteAllText(filePath, sb.ToString(), Encoding.UTF8);
}
}
}
Ausgabe-CSV

Methode 2: Großer C# DataTable-zu-CSV-Export mit StreamWriter
Für große DataTables kann die Verwendung von StringBuilder speicherintensiv sein. StreamWriter ermöglicht es Ihnen, Zeilen Zeile für Zeile zu schreiben, was für große Datensätze effizient ist.
Schritte für den StreamWriter-basierten C# DataTable-CSV-Export
- Erstellen oder rufen Sie Ihre DataTable mit den erforderlichen Daten ab.
- Initialisieren Sie einen StreamWriter mit dem Ausgabe-CSV-Dateipfad und der gewünschten Kodierung (wie UTF-8).
- Schreiben Sie die Kopfzeile unter Verwendung der DataTable-Spaltennamen.
- Durchlaufen Sie die DataTable-Zeilen und schreiben Sie jede Zeile in die Datei.
- Maskieren Sie Werte, die Sonderzeichen (Kommas, Anführungszeichen, Zeilenumbrüche) enthalten, um die CSV-Integrität zu wahren.
- Schließen Sie den StreamWriter, um Systemressourcen freizugeben.
Beispielcode
using System;
using System.Data;
using System.IO;
using System.Text;
namespace DataTableToCSV
{
internal class Program
{
static void Main(string[] args)
{
// -------------------------------
// Schritt 1: Eine neue DataTable für dieses Beispiel erstellen
// -------------------------------
DataTable table = new DataTable("Products");
// Spalten definieren: ProductID, ProductName, Category, Price, Stock, LaunchDate
table.Columns.Add("ProductID", typeof(int));
table.Columns.Add("ProductName", typeof(string));
table.Columns.Add("Category", typeof(string));
table.Columns.Add("Price", typeof(decimal));
table.Columns.Add("Stock", typeof(int));
table.Columns.Add("LaunchDate", typeof(DateTime));
// Beispielzeilen mit verschiedenen Produkten hinzufügen
table.Rows.Add(101, "Laptop Pro 15", "Electronics", 1500.99, 25, new DateTime(2023, 1, 10));
table.Rows.Add(102, "Wireless Mouse", "Accessories", 29.95, 200, new DateTime(2022, 11, 5));
table.Rows.Add(103, "Mechanical Keyboard", "Accessories", 79.99, 150, new DateTime(2022, 12, 1));
table.Rows.Add(104, "4K Monitor", "Electronics", 399.50, 40, new DateTime(2023, 2, 20));
table.Rows.Add(105, "USB-C Hub", "Accessories", 49.99, 300, new DateTime(2022, 9, 18));
table.Rows.Add(106, "Gaming Chair", "Furniture", 259.99, 15, new DateTime(2023, 3, 5));
// -------------------------------
// Schritt 2: DataTable mit StreamWriter in CSV exportieren
// -------------------------------
string csvPath = "products_stream.csv";
DataTableToCsvStream(table, csvPath);
Console.WriteLine($"CSV-Datei erfolgreich erstellt: {csvPath}");
}
/// <summary>
/// Eine DataTable mit StreamWriter in CSV exportieren (effizient für große Datensätze)
/// </summary>
/// <param name="dt">Die zu exportierende DataTable</param>
/// <param name="filePath">Der zu speichernde CSV-Dateipfad</param>
public static void DataTableToCsvStream(DataTable dt, string filePath)
{
// StreamWriter für speichereffizientes Schreiben verwenden (Zeile für Zeile)
using (StreamWriter writer = new StreamWriter(filePath, false, Encoding.UTF8))
{
// -------------------------------
// Schritt 1: Spaltenüberschriften schreiben
// -------------------------------
for (int i = 0; i < dt.Columns.Count; i++)
{
writer.Write(dt.Columns[i].ColumnName);
if (i < dt.Columns.Count - 1)
writer.Write(","); // Komma hinzufügen, außer bei der letzten Spalte
}
writer.WriteLine();
// -------------------------------
// Schritt 2: Zeilen schreiben
// -------------------------------
foreach (DataRow row in dt.Rows)
{
for (int i = 0; i < dt.Columns.Count; i++)
{
string value;
// DateTime als yyyy-MM-dd formatieren
if (dt.Columns[i].DataType == typeof(DateTime))
{
value = ((DateTime)row[i]).ToString("yyyy-MM-dd");
}
else
{
value = row[i].ToString();
}
// Sonderzeichen maskieren: Kommas, Anführungszeichen, Zeilenumbrüche
if (value.Contains(",") || value.Contains("\"") || value.Contains("\n"))
{
value = "\"" + value.Replace("\"", "\"\"") + "\"";
}
writer.Write(value);
if (i < dt.Columns.Count - 1)
writer.Write(",");
}
writer.WriteLine();
}
// StreamWriter wird am Ende des using-Blocks automatisch geschlossen
}
}
}
}
Ausgabe-CSV

Methode 3: Spire.XLS for .NET verwenden, um DataTable in C# in CSV zu konvertieren
Für produktionsreife Anwendungen bieten Bibliotheken wie Spire.XLS for .NET eine zuverlässige und effiziente Möglichkeit, den C# DataTable-zu-CSV-Export zu handhaben. Die Bibliothek verarbeitet automatisch Sonderzeichen, Trennzeichen und Kodierung, reduziert den manuellen Codierungsaufwand und gewährleistet eine konsistente, genaue Ausgabe.
Erste Schritte mit Spire.XLS for .NET
Um Spire.XLS in Ihrem C#-Projekt zu verwenden, installieren Sie es über NuGet:
- Öffnen Sie Ihr Projekt in Visual Studio.
- Gehen Sie zu Extras -> NuGet-Paket-Manager -> NuGet-Pakete für Projektmappe verwalten…
- Suchen Sie nach „Spire.XLS“ und klicken Sie auf Installieren.
Alternativ können Sie es schnell über die Paket-Manager-Konsole installieren:
Install-Package Spire.XLS
Nach der Installation können Sie DataTables mühelos in CSV exportieren und weitere Operationen an den resultierenden Dateien durchführen, wie z. B. das Konvertieren von CSV in Excel oder das Importieren von CSV zurück in eine DataTable, alles effizient innerhalb Ihrer .NET-Anwendungen.
Schritte für den Spire.XLS-basierten C# Datatable-zu-CSV-Export
- Bereiten Sie Ihre DataTable mit den zu exportierenden Daten vor.
- Erstellen Sie ein Workbook-Objekt mit Spire.XLS.
- Fügen Sie die DataTable in ein Arbeitsblatt ein.
- Speichern Sie das Arbeitsblatt als CSV und geben Sie Trennzeichen und Kodierung an.
Beispielcode
using Spire.Xls;
using System;
using System.Data;
using System.Text;
namespace DataTableToCSV
{
internal class Program
{
static void Main(string[] args)
{
// -------------------------------
// Schritt 1: Eine neue DataTable für Bücher erstellen
// -------------------------------
DataTable dt = new DataTable("Books");
// Spalten definieren: BookID, Title, Author, Genre, Price, PublishDate
dt.Columns.Add("BookID", typeof(int));
dt.Columns.Add("Title", typeof(string));
dt.Columns.Add("Author", typeof(string));
dt.Columns.Add("Genre", typeof(string));
dt.Columns.Add("Price", typeof(double));
dt.Columns.Add("PublishDate", typeof(DateTime));
// Beispielzeilen hinzufügen
dt.Rows.Add(201, "The Great Gatsby", "F. Scott Fitzgerald", "Classic", 10.99, new DateTime(1925, 4, 10));
dt.Rows.Add(202, "1984", "George Orwell", "Dystopian", 9.99, new DateTime(1949, 6, 8));
dt.Rows.Add(203, "To Kill a Mockingbird", "Harper Lee", "Classic", 12.50, new DateTime(1960, 7, 11));
dt.Rows.Add(204, "The Hobbit", "J.R.R. Tolkien", "Fantasy", 15.75, new DateTime(1937, 9, 21));
dt.Rows.Add(205, "Clean Code", "Robert C. Martin", "Programming", 32.99, new DateTime(2008, 8, 1));
dt.Rows.Add(206, "The Pragmatic Programmer", "Andrew Hunt", "Programming", 29.95, new DateTime(1999, 10, 20));
// -------------------------------
// Schritt 2: Ein Workbook erstellen und DataTable einfügen
// -------------------------------
Workbook workbook = new Workbook();
Worksheet sheet = workbook.Worksheets[0];
// Die DataTable ab Zeile 1, Spalte 1 in das Arbeitsblatt einfügen
// Spaltenüberschriften einschließen
sheet.InsertDataTable(dt, true, 1, 1);
// -------------------------------
// Schritt 3: Das Arbeitsblatt als CSV speichern
// -------------------------------
// Parameter: Dateiname, Trennzeichen, Kodierung
sheet.SaveToFile("books.csv", ",", Encoding.UTF8);
// Ressourcen freigeben
workbook.Dispose();
}
}
}
Ausgabe-CSV

Vorteile der Verwendung von Spire.XLS
- Automatische Handhabung von Sonderzeichen, Trennzeichen und Kodierungen – kein manuelles Maskieren erforderlich.
- Unterstützt sowohl CSV-Import als auch -Export und ist somit flexibel für verschiedene Arbeitsabläufe.
- Vereinfacht produktionsreifen Code – weniger Boilerplate und weniger Fehler im Vergleich zu manuellen Methoden.
- Skalierbar für große Datensätze – funktioniert auch bei Tausenden von Zeilen effizient.
Leistungsvergleich der DataTable-zu-CSV-Methoden
Um die Stärken und Kompromisse jedes Ansatzes besser zu verstehen, finden Sie hier einen direkten Vergleich von StringBuilder, StreamWriter und Spire.XLS beim Exportieren einer DataTable in CSV.
| Methode | Am besten geeignet für | Leistung | Speichernutzung | Codekomplexität | Anmerkungen |
|---|---|---|---|---|---|
| StringBuilder | Kleine Datensätze (<10k Zeilen) | Mittel | Hoch | Mäßig | Volle Kontrolle über die Ausgabe, aber weniger effizient bei großen Dateien |
| StreamWriter | Große Datensätze (10k+ Zeilen) | Hoch | Niedrig | Mäßig | Schreibt Zeile für Zeile, verhindert Speicherüberlastung |
| Spire.XLS | Produktion & Unternehmen | Hoch | Optimiert | Niedrig | Behandelt Maskierung, Kodierung und große Datensätze automatisch |
Welche Methode sollten Sie verwenden?
Während die Vergleichstabelle die technischen Unterschiede hervorhebt, hängt die Wahl der richtigen Methode von Ihrem spezifischen Szenario ab, wie z. B. der Größe des Datensatzes, den Leistungsanforderungen und den Produktionsanforderungen.
- Wählen Sie StringBuilder, wenn Sie die vollständige Kontrolle über die CSV-Formatierung benötigen und mit kleinen bis mittleren Datensätzen arbeiten.
- Wählen Sie StreamWriter, wenn Sie große Datensätze exportieren und eine speichereffiziente Lösung wünschen.
- Wählen Sie Spire.XLS, wenn Sie einen produktionsreifen, zuverlässigen und wartungsarmen Ansatz benötigen, insbesondere beim Umgang mit Sonderfällen oder bei der Integration in Unternehmensworkflows.
Umgang mit Sonderfällen und Best Practices für DataTable zu CSV
Beim Exportieren einer DataTable in CSV in C# ist es wichtig, Best Practices zu befolgen und sich auch einiger Sonderfälle bewusst zu sein, die Ihre CSV-Ausgabe beeinträchtigen könnten. Eine ordnungsgemäße Handhabung stellt sicher, dass Ihre Dateien sauber, zuverlässig und einfach zu verwenden sind.
- Umgang mit Sonderfällen
- Nullwerte – Ersetzen Sie DBNull durch leere Zeichenfolgen oder Platzhalter, damit fehlende Daten Ihre CSV nicht beschädigen.
- Benutzerdefinierte Trennzeichen – Wenn Ihre Daten Kommas enthalten, erwägen Sie die Verwendung von ; oder Tabulatoren (\t), um Verwirrung zu vermeiden.
- Sonderzeichen – Werte mit Anführungszeichen, Kommas oder Zeilenumbrüchen sollten ordnungsgemäß maskiert werden, um die CSV-Integrität zu wahren.
- Kodierungsüberlegungen – UTF-8 wird für die meisten Szenarien empfohlen, aber einige Systeme erfordern möglicherweise UTF-16 oder ANSI.
- Große Datensätze – Bei sehr großen Tabellen sollten Sie eine Aufteilung der Dateien oder die Verwendung speichereffizienter Methoden wie StreamWriter in Betracht ziehen, um Leistungsprobleme zu vermeiden.
- Best Practices
- Bleiben Sie bei der UTF-8-Kodierung für Kompatibilität zwischen Plattformen und Tools.
- Testen Sie mit Sonderfällen wie Nullwerten, Kommas, Anführungszeichen und mehrzeiligen Werten, um unerwartete Fehler zu vermeiden.
- Wählen Sie die richtige Methode – StringBuilder funktioniert gut für kleine Tabellen, StreamWriter eignet sich besser für große Datensätze und Spire.XLS ist ideal für produktionsreife Lösungen.
- Dokumentieren Sie Ihre CSV-Struktur klar, damit andere wissen, wie die Daten zu interpretieren sind.
Fazit
Das Beherrschen von C# DataTable zu CSV ist eine wesentliche Fähigkeit für Entwickler, die mit tabellarischen Daten arbeiten. Dieser Leitfaden behandelte drei praktische Ansätze: die Verwendung von StringBuilder für kleine Datensätze, den Einsatz von StreamWriter für eine effiziente und speicherschonende Handhabung großer Tabellen und die Nutzung der Spire.XLS-Bibliothek für eine zuverlässige, produktionsreife Lösung, die komplexe Szenarien automatisch verwaltet.
Indem Sie diesen Schritt-für-Schritt-Beispielen folgen, können Sie die Konvertierung von C# DataTable in CSV souverän durchführen und sicherstellen, dass Ihre Daten korrekt, teilbar und bereit für die Integration oder weitere Analyse sind.
FAQs
Q1: Wie kann ich eine DataTable effizient in C# in CSV konvertieren?
A1: Sie können drei Methoden verwenden: manuelle Konvertierung mit StringBuilder für kleine Datensätze, StreamWriter für große Datensätze oder die Spire.XLS-Bibliothek für eine produktionsreife Lösung. Jede Methode gewährleistet die ordnungsgemäße Handhabung von Kommas, Anführungszeichen und Zeilenumbrüchen.
Q2: Was ist der beste Weg, um große C# DataTables in CSV zu exportieren?
A2: Für große Datensätze wird StreamWriter empfohlen, da er Zeilen Zeile für Zeile schreibt und so die Speichernutzung reduziert. Spire.XLS ist eine weitere zuverlässige Option für Produktionsumgebungen.
Q3: Wie behandle ich Sonderzeichen und Nullwerte beim Exportieren von DataTable in CSV in C#?
A3: Maskieren Sie immer Kommas, Anführungszeichen und Zeilenumbrüche. Ersetzen Sie Null- oder DBNull-Werte durch leere Zeichenfolgen oder Platzhalter. Die Verwendung von Spire.XLS behandelt die meisten dieser Fälle automatisch.
Q4: Kann ich Trennzeichen und Kodierung beim Exportieren einer DataTable in CSV anpassen?
A4: Ja, Sie können Trennzeichen wie ,, ; oder \t angeben und eine Kodierung wie UTF-8, UTF-16 oder ANSI je nach Systemanforderungen auswählen.
Q5: Warum sollte ich Spire.XLS anstelle von manuellen oder StreamWriter-Methoden verwenden?
A5: Spire.XLS vereinfacht den CSV-Export, indem es Maskierung, Trennzeichen und Kodierung automatisch handhabt, die Codekomplexität reduziert und ideal für mittlere bis große Datensätze oder Anwendungen auf Produktionsebene ist.
Q6: Wie stelle ich sicher, dass meine exportierte CSV-Datei mit Excel und anderen Anwendungen kompatibel ist?
A6: Verwenden Sie die UTF-8-Kodierung, maskieren Sie Sonderzeichen und formatieren Sie Kopfzeilen konsistent. Das Testen der Ausgabe in Excel oder anderen Zielanwendungen hilft, Kompatibilitätsprobleme zu vermeiden.