C# DataTable in CSV umwandeln: 3 einfache Methoden mit Beispielen

2025-09-19 09:04:03 zaki zou

C# DataTable zu CSV - Schritt-für-Schritt-Anleitung

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

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

CSV-Ausgabe, generiert aus DataTable mit C# und StringBulder

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

CSV-Ausgabe, generiert aus DataTable mit C# und StringWriter

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

CSV-Ausgabe, generiert aus DataTable mit C# und der Spire.XLS-Bibliothek

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.

Siehe auch

Coupon Code Copied!

Christmas Sale

Celebrate the season with exclusive savings

Save 10% Sitewide

Use Code:

View Campaign Details