public static class DataReaderExtensions
{
public static void ToCsv(this DbDataReader source, Stream stream)
{
using (var writer = new StreamWriter(stream))
{
var columnIndexes = Enumerable.Range(0, source.FieldCount).ToArray();
writer.WriteLine(string.Join(",", columnIndexes.Select(source.GetName)));
while (source.Read())
{
writer.WriteLine(@"""" + string.Join(@""",""", columnIndexes.Select(i => source.GetValue(i).ToString().Replace(@"""", @""""""))) + @"""");
}
}
}
public static void ToCsv(this DbDataReader source, string filePath)
{
using (var stream = File.Create(filePath))
{
source.ToCsv(stream);
}
}
}
public static class DataTableExtensions
{
public static void ToCsv(this DataTable source, Stream stream)
{
using (var writer = new StreamWriter(stream))
{
var columns = source.Columns.Cast<DataColumn>().ToArray();
writer.WriteLine(string.Join(",", columns.Select(c => c.ColumnName)));
foreach (DataRow row in source.Rows)
{
writer.WriteLine(@"""" + string.Join(@""",""", columns.Select(c => row[c].ToString().Replace(@"""", @""""""))) + @"""");
}
}
}
public static void ToCsv(this DataTable source, string filePath)
{
using (var stream = File.Create(filePath))
{
source.ToCsv(stream);
}
}
}