目前有一个DataTable,但希望通过WebHandler向用户流式传输它。 FileHelpers有CommonEngine.DataTableToCsv(dt, "file.csv")
。但是它保存到文件中。我该如何将其保存到流中?我知道当我预先知道列或它们不改变时如何做到这一点,但我想直接从数据表中生成列标题。
如果我知道列,我只需创建类:
[DelimitedRecord(",")]
public class MailMergeFields
{
[FieldQuoted()]
public string FirstName;
[FieldQuoted()]
public string LastName;
}
然后使用FileHelperEngine并添加记录:
FileHelperEngine engine = new FileHelperEngine(typeof(MailMergeFields));
MailMergeFields[] merge = new MailMergeFields[dt.Rows.Count + 1];
// add headers
merge[0] = new MailMergeFields();
merge[0].FirstName = "FirstName";
merge[0].LastName = "LastName";
int i = 1;
// add records
foreach (DataRow dr in dt.Rows)
{
merge[i] = new MailMergeFields();
merge[i].FirstName = dr["Forename"];
merge[i].LastName = dr["Surname"];
i++;
}
最后将内容写入流中:
TextWriter writer = new StringWriter();
engine.WriteStream(writer, merge);
context.Response.Write(writer.ToString());
很不幸,由于我事先不知道列名,因此无法事先创建类。