Thursday, April 25, 2013

Creating Csv file from DataTable in C#

Steps:
1. Create a DataTable Schema.
2. Fill the created table with some sample data.
3. Create a StringBuilder, by appending all the data, (using comma delimiter)
    a) Create one new line with data table columns.
    b) Create one line for each data table row.
4. Save the StringBuilder to Csv file, using FileStream.

using System;
using System.Text;
using System.Data;
using System.IO;
namespace Conversion
{
class DataConvert
{
static void Main(string[] args)
{
//converting DataTable to Csv file.
DataTableToCsv obj = new DataTableToCsv();
DataTable dtData = obj.CreateStudentTableSchema();
dtData = obj.FillData(dtData);
StringBuilder data = obj.ConvertDataTableToCsvFile(dtData);
obj.SaveData(data, @"D:\\student.csv");
Console.WriteLine("Data converted successfully from DataTable to Csv file.");
Console.ReadLine();
}
}
class DataTableToCsv
{
//This method creates the DataTable schema (column names and their types).
public DataTable CreateStudentTableSchema()
{
DataTable dtData = new DataTable("Student");
dtData.Columns.Add("StudentId", typeof(int));
dtData.Columns.Add("Name", typeof(string));
dtData.Columns.Add("Course", typeof(string));
dtData.Columns.Add("Age", typeof(int));
return dtData;
}
//This method fill the data table with some sample records.
public DataTable FillData(DataTable dtData)
{
dtData.Rows.Add(1, "Bala", "MCA", 26);
dtData.Rows.Add(2, "Murali", "BCA", 23);
dtData.Rows.Add(3, "Venu", "BSC", 23);
dtData.Rows.Add(4, "Srinivas", "BBM", 22);
dtData.Rows.Add(5, "Srikanth", "MBA", 25);
dtData.Rows.Add(6, "Harsha", "MCA", 26);
return dtData;
}
//This method convertrs the DataTable to Csv (in the form of StringBuilder instance).
public StringBuilder ConvertDataTableToCsvFile(DataTable dtData)
{
StringBuilder data = new StringBuilder();
//Taking the column names.
for (int column = 0; column < dtData.Columns.Count; column++)
{
//Making sure that end of the line, shoould not have comma delimiter.
if (column == dtData.Columns.Count - 1)
data.Append(dtData.Columns[column].ColumnName.ToString().Replace(",", ";"));
else
data.Append(dtData.Columns[column].ColumnName.ToString().Replace(",", ";") + ',');
}
data.Append(Environment.NewLine);//New line after appending columns.
for (int row = 0; row < dtData.Rows.Count; row++)
{
for (int column = 0; column < dtData.Columns.Count; column++)
{
////Making sure that end of the line, shoould not have comma delimiter.
if (column == dtData.Columns.Count - 1)
data.Append(dtData.Rows[row][column].ToString().Replace(",", ";"));
else
data.Append(dtData.Rows[row][column].ToString().Replace(",", ";") + ',');
}
//Making sure that end of the file, should not have a new line.
if (row != dtData.Rows.Count - 1)
data.Append(Environment.NewLine);
}
return data;
}
//This method saves the data to the csv file.
public void SaveData(StringBuilder data, string filePath)
{
using (StreamWriter objWriter = new StreamWriter(filePath))
{
objWriter.WriteLine(data);
}
}
}
}
view raw DataTableToCsv hosted with ❤ by GitHub

No comments:

Post a Comment