• Skip to primary navigation
  • Skip to main content

Josh Withee

  • Home
  • Blog
  • Contact
  • Show Search
Hide Search

C# DataTable to CSV

Josh Withee · March 31, 2022 · Leave a Comment

Extension methods for dumping a C# DataTable to a CSV file or string.

using System;
using System.Data;
using System.IO;
using System.Text;

namespace MyNamespace
{
    public static class ExtensionMethods
    {
        public static void ToCsvFile(this DataTable dataTable, string filePath, char separator = ',', bool printColumnHeaders = true)
        {
            StreamWriter sw = new StreamWriter(filePath, false);
            int columnCount = dataTable.Columns.Count;

            // Print column headers
            if (printColumnHeaders)
            {
                for (int i = 0; i < columnCount; i++)
                {
                    sw.Write(dataTable.Columns[i].ToString());
                    if (i < columnCount - 1)
                        sw.Write(separator);
                }
                sw.Write(Environment.NewLine);
            }

            // Print rows
            foreach (DataRow dr in dataTable.Rows)
            {
                for (int i = 0; i < columnCount; i++)
                {
                    if (!Convert.IsDBNull(dr[i]))
                        sw.Write(dr[i].ToString());
                    if (i < columnCount - 1)
                        sw.Write(separator);
                }
                sw.Write(Environment.NewLine);
            }
            sw.Close();
        }

        public static string ToCsvString(this DataTable dataTable, char separator = ',', bool printColumnHeaders = true)
        {
            StringBuilder sb = new StringBuilder();
            int columnCount = dataTable.Columns.Count;

            // Print column headers
            if (printColumnHeaders)
            {
                for (int i = 0; i < columnCount; i++)
                {
                    sb.Append(dataTable.Columns[i].ToString());
                    if (i < columnCount - 1)
                        sb.Append(separator);
                }
                sb.Append(Environment.NewLine);
            }

            // Print rows
            foreach (DataRow dr in dataTable.Rows)
            {
                for (int i = 0; i < columnCount; i++)
                {
                    if (!Convert.IsDBNull(dr[i]))
                        sb.Append(dr[i].ToString());
                    if (i < columnCount - 1)
                        sb.Append(separator);
                }
                sb.Append(Environment.NewLine);
            }

            return sb.ToString();
        }
    }
}

For DataReader to CSV, this worked for me:
https://stackoverflow.com/a/29561684/8534588

Related

Uncategorized C#, CSV, DataTable

Reader Interactions

Leave a Reply Cancel reply

Your email address will not be published. Required fields are marked *

Copyright © 2025