C# methods to write data contained in a DataTable or DataView to CSV.
using System;
using System.Data;
using System.Windows.Forms;
using System.IO;
private void ExportDatatviewToCsv(string filename, DataView dv)
{
// Open output stream
StreamWriter swFile = new StreamWriter(filename);
// Header
string[] colLbls = new string[dv.Table.Columns.Count];
for (int i = 0; i < dv.Table.Columns.Count; i++)
{
colLbls[i] = dv.Table.Columns[i].ColumnName;
colLbls[i] = GetWriteableValueForCsv(colLbls[i]);
}
// Write labels
swFile.WriteLine(string.Join(",", colLbls));
// Rows of Data
foreach (DataRowView rowData in dv)
{
string[] colData = new string[dv.Table.Columns.Count];
for (int i = 0; i < dv.Table.Columns.Count; i++)
{
object obj = rowData[i];
colData[i] = GetWriteableValueForCsv(obj);
}
// Write data in row
swFile.WriteLine(string.Join(",", colData));
}
// Close output stream
swFile.Close();
}
private void ExportDatatableToCsv(string filename, DataTable dt)
{
// Open output stream
StreamWriter swFile = new StreamWriter(filename);
// Header
string[] colLbls = new string[dt.Columns.Count];
for (int i = 0; i < dt.Columns.Count; i++)
{
colLbls[i] = dt.Columns[i].ColumnName;
colLbls[i] = GetWriteableValueForCsv(colLbls[i]);
}
// Write labels
swFile.WriteLine(string.Join(",", colLbls));
// Rows of Data
foreach (DataRow rowData in dt.Rows)
{
string[] colData = new string[dt.Columns.Count];
for (int i = 0; i < dt.Columns.Count; i++)
{
object obj = rowData[i];
colData[i] = GetWriteableValueForCsv(obj);
}
// Write data in row
swFile.WriteLine(string.Join(",", colData));
}
// Close output stream
swFile.Close();
}
public static string GetWriteableValueForCsv(object obj)
{
// Nullable types to blank
if (obj == null || obj == Convert.DBNull)
{
return "";
}
// if string has no ','
if (obj.ToString().IndexOf(",") == -1)
{
return obj.ToString();
}
// remove backslahes
return "\"" + obj.ToString() + "\"";
}