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
Leave a Reply