Export DataTable or DataSet to CSV or XML

using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
using System.IO;
using System.Linq;
using System.Text;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Xml.Serialization;

public partial class ExportReservationInfo : System.Web.UI.Page
{
    #region Events
    protected void Page_Load(object sender, EventArgs e)
    {
        lblMsg.Text = "";
        if (Page.IsPostBack)
        {
            
        }
    }

    protected void btnExportToCSV_Click(object sender, EventArgs e)
    {
        string strReservationId = txtReservationId.Text.Trim();
        DataSet ds;
        try
        {
            int ReservationId = Convert.ToInt32(strReservationId);
            ds = ExecuteQuery(ReservationId);

            //Export to CSV
            ExportToSpreadsheet(ds, "ReservationInfo");
        }
        catch (Exception ex)
        {
            lblMsg.Text = "Please enter a valid Reservation Id";
        }
        
    }

    protected void btnExportToXML_Click(object sender, EventArgs e)
    {
        string strReservationId = txtReservationId.Text.Trim();
        DataSet ds;
        try
        {
            int ReservationId = Convert.ToInt32(strReservationId);
            ds = ExecuteQuery(ReservationId);

            //Export to XML
            ExportToXml(ds, "ReservationInfo");
        }
        catch (Exception ex)
        {
            lblMsg.Text = "Please enter a valid Reservation Id";
        }

    }
    #endregion

    #region Methods
    private DataSet ExecuteQuery(int ReservationId)
    {
        DataSet dsResult = new DataSet("ReservationInfo");
        SqlConnection con = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["LocalSqlServer"].ConnectionString);

        try
        {
            con = new SqlConnection(con.ConnectionString);
            con.Open();

            SqlCommand command = new SqlCommand("spGetCSIAttendeeInfo", con);
            command.CommandType = CommandType.StoredProcedure;
            command.Parameters.AddWithValue("@ReservationRoomID", ReservationId);

            SqlDataAdapter adapter = new SqlDataAdapter(command);
            adapter.Fill(dsResult);
            //foreach (DataTable dt in dsResult.Tables) { }
            //foreach (DataRow dr in dsResult.Tables[0].Rows) {}
        }
        catch (Exception ex)
        {
            throw new Exception(ex.Message, ex);
        }
        finally
        {
            if (con != null)
                con.Dispose();
        }
        return dsResult;
    }

    private void ExportToXml(DataSet ds, string name)
    {
        try
        {
            using (var memoryStream = new MemoryStream())
            {
                using (TextWriter streamWriter = new StreamWriter(memoryStream))
                {
                    var xmlSerializer = new XmlSerializer(typeof (DataSet));
                    xmlSerializer.Serialize(streamWriter, ds);

                    //return Encoding.UTF8.GetString(memoryStream.ToArray());
                    var docresult = Encoding.UTF8.GetString(memoryStream.ToArray());

                    Response.Write(docresult);
                    Response.ContentType = "text/xml; charset=utf-8";
                    Response.AddHeader("Content-Disposition", "attachment; filename=" + name + ".xml");
                    Response.End();
                }

            }
        }
        catch (Exception ex)
        {
            lblMsg.Text = "An error occured processing your request" + ex.Message;
        }
    }

    private void ExportToSpreadsheet(DataSet ds, string name)
    {
        StringBuilder sb = new StringBuilder();
        HttpContext context = HttpContext.Current;
        try
        {
            context.Response.Clear();

            foreach (DataTable table in ds.Tables)
            {
                foreach (DataColumn column in table.Columns)
                {
                    sb.Append(column.ColumnName + ",");
                }

                sb.AppendLine();

                foreach (DataRow row in table.Rows)
                {
                    for (int i = 0; i < table.Columns.Count; i++)
                    {
                        sb.Append(row[i].ToString().Replace(",", ";") + ",");
                    }

                    sb.AppendLine();
                }

                sb.AppendLine();
                sb.AppendLine();
            }

            context.Response.Write(sb.ToString());
            context.Response.ContentType = "text/csv";
            context.Response.AppendHeader("Content-Disposition", "attachment; filename=" + name + ".csv");
            context.Response.End();
        }
        catch (Exception ex)
        {
            lblMsg.Text = "An error occured processing your request" + ex.Message;
        }
    }

    private void ExportToSpreadsheet(DataTable table, string name)
    {
        try
        {
            HttpContext context = HttpContext.Current;
            context.Response.Clear();
            foreach (DataColumn column in table.Columns)
            {
                context.Response.Write(column.ColumnName + ",");
            }
            context.Response.Write(Environment.NewLine);
            foreach (DataRow row in table.Rows)
            {
                for (int i = 0; i < table.Columns.Count; i++)
                {
                    context.Response.Write(row[i].ToString().Replace(",", ";") + ",");
                }
                context.Response.Write(Environment.NewLine);
            }
            context.Response.ContentType = "text/csv";
            context.Response.AppendHeader("Content-Disposition", "attachment; filename=" + name + ".csv");
            context.Response.End();
        }
        catch (Exception ex)
        {
            lblMsg.Text = "An error occured processing your request" + ex.Message;
        }
    }
    #endregion
}

Comments

Popular posts from this blog

Crystal Report FAQ Error and Fixes

Linux Command ref