如何在ASP.NET Web窗体中将视图作为CSV提供

时间:2010-03-29 18:38:07

标签: asp.net sql entity-framework csv httphandler

我有一个MS SQL视图,我希望在ASPNET Web窗体应用程序中以CSV格式提供。我正在为项目中的其他视图和表使用Entity Framework。启用此下载的最佳方法是什么?

我可以添加一个LinkBut​​ton,其Click处理程序在视图上迭代,将其CSV表单写入磁盘,然后提供该文件。但是,如果可以避免,我宁愿不写入磁盘,而且这涉及可以通过其他解决方案避免的迭代代码。

4 个答案:

答案 0 :(得分:2)

您可以迭代数据集,但不是在服务器上创建CSV文件,而只是通过HTTP响应返回它。以下功能应该可以解决问题。

Public Shared Sub ExportTextFile(ByVal response As System.Web.HttpResponse, ByVal text As String, ByVal fileName As String)

    response.Clear()
    response.AddHeader("content-disposition", String.Format("attachment;filename={0}", fileName))
    response.Charset = ""
    response.Cache.SetCacheability(HttpCacheability.NoCache)
    response.ContentType = "application/vnd.text"

    Dim stringWrite As New System.IO.StringWriter
    Dim htmlWrite = New HtmlTextWriter(stringWrite)
    response.Write(text.ToString)
    response.End()

End Sub

答案 1 :(得分:1)

请参阅this article,特别是方法WriteToCsv();这会将csv数据作为PersonList.csv发送到浏览器。

更新:可能的Asp.Net场景:

protected void Page_Load(object sender, EventArgs e)
{
  var data = GetMyData(...);
  CSVExporter.WriteToCSV(data);
}

答案 2 :(得分:0)

这是我从任何IDataReader中停止csv文件的代码。使用ExecuteReader()和HttpResponse.OutputStream的结果调用它。它将在第一行写出列名,然后写出一组或多组数据行。按照matt的建议将其输出到浏览器,不过我会建议内容类型为'text / csv'。

public static void createCsvFile(IDataReader reader, StreamWriter writer) {
  for (int columnCounter = 0; columnCounter < reader.FieldCount; columnCounter++) {
    if (columnCounter > 0) {
      writer.Write(Separator);
    }
    writer.Write(Delimiter + reader.GetName(columnCounter) + Delimiter);
  }
  writer.WriteLine(string.Empty);

  do {
    while (reader.Read()) {
      for (int columnCounter = 0; columnCounter < reader.FieldCount; columnCounter++) {
        if (columnCounter > 0) {
         writer.Write(Separator);
       }
       writer.Write("\""+ reader.GetValue(columnCounter).ToString().Replace('"', '\'') + "\"");
      }
      writer.WriteLine(string.Empty);
    } 
    writer.Flush();
  }
  while (reader.NextResult());

答案 3 :(得分:0)

我发现了这个问题,它解决了困境的HttpHandler部分。

In ASP.NET, how to get the browser to download string content into a file? (C#)