记录没有保存到下载的CSV文件中

本文关键字:CSV 文件 下载 保存 记录 | 更新日期: 2023-09-27 18:08:18

我正在使用(呃,尝试,无论如何)CsvHelper将记录写入CSV文件,然后下载该文件。现在,文件下载,但它只写"CsvHelper"。到第一行的第一列。就是这样。我错过了什么?

启动下载的按钮处理程序:

protected void DownloadChargeDataAsCSV(object sender, EventArgs e)
{
    List<ChargeDetail> charges = ChargeDetail.GetDetailsForPatient(lblPatientNum.Text, lblPatientName.Text);
    string attachment = "attachment; filename=MyCsvLol.csv";
    HttpContext.Current.Response.Clear();
    HttpContext.Current.Response.ClearHeaders();
    HttpContext.Current.Response.ClearContent();
    HttpContext.Current.Response.AddHeader("content-disposition", attachment);
    HttpContext.Current.Response.ContentType = "text/csv";
    HttpContext.Current.Response.AddHeader("Pragma", "public");
    using (var textWriter = File.CreateText("MyCsvLol.csv"))
    using (var writer = new CsvWriter(textWriter))
    {
        foreach (var charge in charges)
        {
            writer.WriteRecord(charge);
        }
        HttpContext.Current.Response.Write(writer);
        HttpContext.Current.Response.End();
    }
}

收费明细类:

public class ChargeDetail
{
    public string PatientNumber { get; set; }
    public string PateintName { get; set; }
    public string Date { get; set; }
    public string ChargeCode { get; set; }
    public string Description { get; set; }
    public string Qty { get; set; }
    public string UnitPrice { get; set; }
    public string ExtAmt { get; set; }
    public static List<ChargeDetail> GetDetailsForPatient(string patientNumber, string patientName)
    {
        List<ChargeDetail> charges = new List<ChargeDetail>();
        DataTable thisDT = new DataTable();
        using (SqlConnection thisConnection = new SqlConnection(ConfigurationManager.ConnectionStrings["DBConnectionString"].ConnectionString))
        {
            string SprocName = "GetChargeDetails";
            SqlDataAdapter thisAdapter = new SqlDataAdapter(SprocName, thisConnection);
            thisAdapter.SelectCommand.CommandType = CommandType.StoredProcedure;
            thisAdapter.SelectCommand.Parameters.AddWithValue("@PatientNumber", patientNumber);
            thisAdapter.Fill(thisDT);
        }
        foreach (DataRow row in thisDT.Rows)
        {
            charges.Add(new ChargeDetail(patientNumber, patientName, row));
        }
        return charges;
    }
    public ChargeDetail(string patientNumber, string patientName, DataRow row)
    {
        this.PatientNumber = patientNumber;
        this.PateintName = patientName;
        this.Date = row["SrvcDate"].ToString();
        this.ChargeCode = row["ChargeCode"].ToString();
        this.Description = row["ChargeDescription"].ToString();
        this.Qty = row["HHY_Qty"].ToString();
        this.UnitPrice = row["PatPrice"].ToString();
        this.ExtAmt = row["ExtAmt"].ToString();
    }
    public ChargeDetail()
    {
    }
}

记录没有保存到下载的CSV文件中

我需要一些类似的东西。我使用了anwyatt发布的代码,但我偶尔会在响应中得到一个空文件或不完整的文件,除非我先刷新Stream Writer。对不起,我不能评论他的回答,但我想我应该把这个贴出来,以防别人有类似的问题。

protected void DownloadChargeDataAsCSV(object sender, EventArgs e)
{
    List<ChargeDetail> charges = ChargeDetail.GetDetailsForPatient(lblPatientNum.Text, lblPatientName.Text);
    string attachment = "attachment; filename=ChargeDetails.csv";
    HttpContext.Current.Response.Clear();
    HttpContext.Current.Response.ClearHeaders();
    HttpContext.Current.Response.ClearContent();
    HttpContext.Current.Response.AddHeader("content-disposition", attachment);
    HttpContext.Current.Response.ContentType = "text/csv";
    HttpContext.Current.Response.AddHeader("Pragma", "public");
    using (var memoryStream = new MemoryStream())
    using (var streamWriter = new StreamWriter(memoryStream))
    using (var streamReader = new StreamReader(memoryStream))
    using (var writer = new CsvWriter(streamWriter))
    {
        writer.WriteRecords(charges);
        streamWriter.Flush();
        memoryStream.Position = 0;
        HttpContext.Current.Response.Write(streamReader.ReadToEnd());
    }
    HttpContext.Current.Response.End();
}

无法读取"writer"。保存文件后,再将其读取回发给用户。

using (var textWriter = File.CreateText("MyCsvLol.csv"))
    using (var writer = new CsvWriter(textWriter))
    {
        foreach (var charge in charges)
        {
            writer.WriteRecord(charge);
        }       
    }
 HttpContext.Current.Response.Write(File.ReadAllText("MyCsvLol.csv"));
 HttpContext.Current.Response.End();

这使它工作。

protected void DownloadChargeDataAsCSV(object sender, EventArgs e)
{
    List<ChargeDetail> charges = ChargeDetail.GetDetailsForPatient(lblPatientNum.Text, lblPatientName.Text);
    string attachment = "attachment; filename=ChargeDetails.csv";
    HttpContext.Current.Response.Clear();
    HttpContext.Current.Response.ClearHeaders();
    HttpContext.Current.Response.ClearContent();
    HttpContext.Current.Response.AddHeader("content-disposition", attachment);
    HttpContext.Current.Response.ContentType = "text/csv";
    HttpContext.Current.Response.AddHeader("Pragma", "public");
    using (var memoryStream = new MemoryStream())
    using (var streamWriter = new StreamWriter(memoryStream))
    using (var streamReader = new StreamReader(memoryStream))
    using (var writer = new CsvWriter(streamWriter))
    {
        writer.WriteRecords(charges);
        memoryStream.Position = 0;
        HttpContext.Current.Response.Write(streamReader.ReadToEnd());
    }
    HttpContext.Current.Response.End();
}