CSV File Creation in ASP.Net


Creat a class file and write method for getting csv file bytes as output with DataTable as input.

namespace ExcelCSVHelper
{
public static class ExcelCSVByteHelper
    {
        private class CsvRow : List<string>
        {
            public string LineText { get; set; }
        }

        private class CsvFileWriter : StreamWriter
        {
            public CsvFileWriter(Stream stream)
                : base(stream)
            {
            }

            public CsvFileWriter(string filename)
                : base(filename)
            {
            }

            /// <summary>
            /// Writes a single row to a CSV file.
            /// </summary>
            /// <param name="row">The row to be written</param>
            public void WriteRow(CsvRow row)
            {
                StringBuilder builder = new StringBuilder();
                bool firstColumn = true;
                foreach (string value in row)
                {
                    // Add separator if this isn't the first value
                    if (!firstColumn)
                        builder.Append(',');
                    // Implement special handling for values that contain comma or quote
                    // Enclose in quotes and double up any double quotes
                    if (value.IndexOfAny(new char[] { '"', ',' }) != -1)
                        builder.AppendFormat("\"{0}\"", value.Replace("\"", "\"\""));
                    else
                        builder.Append(value);
                    firstColumn = false;
                }
                row.LineText = builder.ToString();
                WriteLine(row.LineText);
            }
        }

       
public static byte[] Get_CSV_Stream(DataTable dt)
        {
            byte[] content = null;

            try
            {
                int Row_Count = dt.Rows.Count, Column_Count = dt.Columns.Count;
                // Write data to CSV file
                using (MemoryStream stream = new MemoryStream())
                {
                    using (CsvFileWriter writer = new CsvFileWriter(stream))
                    {
                        DataRow dr;

                        #region Header Section

                        CsvRow Head_row = new CsvRow();
                        for (int i = 0; i < Column_Count; i++)
                        {
                            Head_row.Add(string.Format("{0}", dt.Columns[i].ColumnName));
                        }
                        writer.WriteRow(Head_row);

                        #endregion

                        #region Non-Header Section

                        for (int i = 0; i < Row_Count; i++)
                        {
                            dr = dt.Rows[i];
                            CsvRow row = new CsvRow();
                            for (int j = 0; j < Column_Count; j++)
                            {
                                row.Add(string.Format("{0}", dr[j]));
                            }
                            writer.WriteRow(row);
                        }

                        #endregion

                        if (stream.Length > 0)
                        {
                            content = stream.ToArray();
                        }
                    }
                }
            }
            catch
            {
                //do nothing
            }

            return content;
        }

}

}

Call it from web page:
protected void Page_Load(object sender, EventArgs e)
        {
GetXLCSV();

        }

private void GetXLCSV()
        {
            DataTable dt = Get_Data();
            byte[] content = ExcelCSVHelper.ExcelCSVByteHelper.Get_CSV_Stream(dt);
            Download_File(content,0);
        }

        private DataTable Get_Data()
        {
            DataTable dt = new DataTable();
            dt.Columns.Add("SNo");
            dt.Columns.Add("Name");
            dt.Columns.Add("Address");
            dt.Columns.Add("Created");

            for (int i = 0; i < 2000; i++)
            {
                DataRow dr = dt.NewRow();
                dr["SNo"] = i + 1;
                dr["Name"] = "Name" + i;
                dr["Address"] = "Address" + i;
                dr["Created"] = DateTime.Now.ToString("dd-MMM-yyyy");

                dt.Rows.Add(dr);
                dt.AcceptChanges();
            }

            return dt;
        }

        private void Download_File(byte[] content,int type)
        {
            string FileName = string.Empty;
            if (type == 0)
            {
                FileName = "MyFile.csv";
            }
            else
            {
                FileName = "MyFile.xls";
            }
            if (content != null)
            {
                Response.ContentType = "application/octet";
                Response.AddHeader("Content-Disposition", string.Format("attachment;filename={0}", FileName));
                Response.BinaryWrite(content);
                Response.End();
                Response.Close();
                Response.Flush();
            }
        }

You Can Download the Working Code From here.