记录没有保存到下载的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()
{
}
}
我需要一些类似的东西。我使用了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();
}