Manoj Maharana
Manoj Maharana

Reputation: 62

Data is not being returned in table format on SqlDataReader for download csv file

Here is the table structure:

enter image description here

Here is the code:

protected void Write_CSV_From_Recordset2(SqlDataReader oDataReader)
{
    StringBuilder builder = new StringBuilder();

    List<string> columnNames = new List<string>();
    List<string> rows = new List<string>();

    for (int i = 0; i < oDataReader.FieldCount; i++)
    {
        string tmpColumnName = oDataReader.GetName(i);
        columnNames.Add(tmpColumnName);
    }

    builder.Append(string.Join(",", columnNames.ToArray())).Append("\n");

    List<string> currentRow = new List<string>();

    while (oDataReader.Read())
    {
        ////base.WriteLog(oDataReader.FieldCount + "fieldcount");
        for (int i = 0; i < oDataReader.FieldCount; i++)
        {
            object item = oDataReader[i];
            currentRow.Add(item.ToString());
        }
    }

    //builder.Append(string.Join("\n", rows.ToArray())).Append("\n");  
    rows.Add(string.Join(",", currentRow.ToArray()));
    builder.Append(string.Join(",", rows.ToArray())).Append("\n");

    Response.Clear();
    Response.ContentType = "text/csv";
    Response.AddHeader("Content-Disposition", "attachment;filename=pretestscore.csv");
    Response.Write(builder.ToString());
    Response.End();
}

The problem is that while output is begin returned, the

while (oDataReader.Read())

function the value are being returned just like

281063,70,7091,85,TEST,200,test,NULL

How to get actually data from the table?

Where is the mistake in my code?

Any suggestions?

Upvotes: 0

Views: 64

Answers (2)

Manoj Maharana
Manoj Maharana

Reputation: 62

protected void Write_CSV_From_Recordset2(SqlDataReader oDataReader)
    {
        string strCSV = string.Empty;

        for (int i = 0; i < oDataReader.FieldCount; i++)
        {
            string tmpColumnName = oDataReader.GetName(i);

            strCSV += tmpColumnName + ',';
        }

        strCSV += "\r\n";



        while (oDataReader.Read())
        {


            for (int i = 0; i < oDataReader.FieldCount; i++)
            {
                object item = oDataReader[i];

                strCSV += item.ToString().Replace(",", ";") + ',';

            }


            strCSV += "\r\n";

        }


        //Download the CSV file.
        Response.Clear();
        Response.Buffer = true;
        Response.AddHeader("content-disposition", "attachment;filename=pretestscore.csv");
        Response.Charset = "";
        Response.ContentType = "application/text";
        Response.Output.Write(strCSV);
        Response.Flush();
        Response.End();


    }

Upvotes: 1

Priyank_Vadi
Priyank_Vadi

Reputation: 1138

You can directly write code with comma separated with for loop or while loop.

You can refer this code and you will get idea

string s;                
while (reader.Read())
{
    if(!String.IsNullOrEmpty(s)){
        s += ", ";
    }
    s += reader["name"].ToString();
}

Upvotes: 0

Related Questions