下载datatable作为csv文件

问题描述:

大家好我想让用户从数据库下载数据,以便他们可以操纵它无法访问数据库。到目前为止,我有这个它使文件,但我需要它下载到客户端电脑。有小费吗?下载datatable作为csv文件

Protected Sub ExportDataTableToCSV(cmdText As String) 
    Try 
     Dim sqlcon_Local As New SqlClient.SqlConnection 
     sqlcon_Local.ConnectionString = ConfigurationManager.ConnectionStrings("Portal").ConnectionString 
     Dim objCmd As New SqlCommand(cmdText, sqlcon_Local) 
     Dim da As SqlDataAdapter = New SqlDataAdapter(objCmd) 
     Dim dt As DataTable = New DataTable 
     da.Fill(dt) 
     Dim filename As String = Server.MapPath("~/download.csv") 
     Dim sw As New StreamWriter(filename, False) 

     Dim iColCount As Integer = dt.Columns.Count 
     For i As Integer = 0 To iColCount - 1 
      sw.Write(dt.Columns(i)) 
      If i < iColCount - 1 Then 
       sw.Write(",") 
      End If 
     Next 
     sw.Write(sw.NewLine) 

     For Each dr As DataRow In dt.Rows 
      For i As Integer = 0 To iColCount - 1 
       If Not Convert.IsDBNull(dr(i)) Then 
        sw.Write(dr(i).ToString()) 
       End If 
       If i < iColCount - 1 Then 
        sw.Write(",") 
       End If 
      Next 
      sw.Write(sw.NewLine) 
     Next 
     sw.Close() 

     Response.Clear() 
     Response.ContentType = "application/csv" 
     Response.AddHeader("Content-Disposition", "attachment; filename=download.csv") 
     Response.WriteFile(filename) 
     Response.Flush() 
     Response.End() 

    Catch ex As Exception 

    End Try 
End Sub 

我在做什么错? 任何输入将受到欢迎。

谢谢你的时间!

请改变Response.ContentType作为

Response.ContentType = “文本/ CSV”;

希望这将帮助你

+0

这没有奏效,谢谢你的想法。 – Ja77aman 2013-04-12 01:27:14

Public Shared Function Export_CSV(ByVal cmdText As String) As String 

     Dim message As String = Nothing 

     Try 

      Dim sqlcon_Local As New SqlClient.SqlConnection 
      sqlcon_Local.ConnectionString = ConfigurationManager.ConnectionStrings("Portal").ConnectionString 
      Dim objCmd As New SqlCommand(cmdText, sqlcon_Local) 
      Dim da As SqlDataAdapter = New SqlDataAdapter(objCmd) 
      Dim dt As DataTable = New DataTable 
      da.Fill(dt) 

      Dim context As HttpContext = HttpContext.Current 
      context.Response.Clear() 

      For Each column As DataColumn In dt.Columns 
       context.Response.Write(column.ColumnName + ",") 
      Next 

      context.Response.Write(Environment.NewLine) 

      For Each row As DataRow In dt.Rows 

       For i As Integer = 0 To dt.Columns.Count - 1 
        context.Response.Write(row(i).ToString.Replace(",", String.Empty) + ",") 
       Next 

       context.Response.Write(Environment.NewLine) 

      Next 

      context.Response.ContentType = "txt/csv" 
      context.Response.AppendHeader("Content-Disposition", "attachment; filename=" + download + ".csv") 

      HttpContext.Current.ApplicationInstance.CompleteRequest() 

      message = "Export Successful" 

     Catch ex As Exception 

      message = ex.Message.ToString 

     End Try 

     Return message 

    End Function 

裁判:http://www.thewebbureau.com/tech_blog/post/Export-DataTable-To-CSV.aspx

如果你有问题,IE浏览器

变化

context.Response.AppendHeader("Content-Disposition", "attachment; filename=" + download + ".csv") 

context.Response.AppendHeader("Content-Disposition", "attachment; inline=" + download + ".csv") 
+0

感谢您的信息,它似乎没有下载该文件。它会在“context.Response.End()” – Ja77aman 2013-04-12 01:26:40

+0

中创建一个异常,这是什么例外?我已经测试,它工作正常 – Damith 2013-04-12 03:10:50

+0

“线程正在中止” – Ja77aman 2013-04-12 04:24:03