c#从DataTable和MySQL下载大型csv文件

时间:2017-09-11 08:49:00

标签: c# mysql asp.net csv

我无法使用C#从ASP.Net中的 DataTable 动态创建CSV文件。

使用sql查询提取的行数为831,但输出无效且网页无响应。

我尝试过在查询中添加LIMIT 10并且下载工作正常。

有什么建议吗?

我的代码如下。

提前感谢您的帮助,非常感谢。

string sqlXls = @String.Format(" SELECT * FROM doTable; ");

using (OdbcConnection con =
  new OdbcConnection(ConfigurationManager.ConnectionStrings["ConnMySQL"].ConnectionString))
{
    using (OdbcCommand cmd =
        new OdbcCommand(sqlXls, con))
    {
        try
        {
            cmd.Connection.Open();

            using (OdbcDataAdapter sda = 
                new OdbcDataAdapter())
            {
                cmd.Connection = con;
                sda.SelectCommand = cmd;

                using (DataTable dt = 
                    new DataTable())
                {
                    sda.Fill(dt);

                    string csv = string.Empty;

                    foreach (DataColumn column in dt.Columns)
                    {
                        csv += column.ColumnName + ',';
                    }

                    csv += "\r\n";

                    foreach (DataRow row in dt.Rows)
                    {
                        foreach (DataColumn column in dt.Columns)
                        {
                            csv += row[column.ColumnName].ToString().Replace(",", ";") + ',';
                        }

                        csv += "\r\n";
                    }

                    Response.Clear();
                    Response.Buffer = true;
                    Response.AddHeader("content-disposition", "attachment;filename=SqlExport.csv");
                    Response.Charset = "";
                    Response.ContentType = "application/text";
                    Response.Output.Write(csv);
                    Response.Flush();
                    Response.End();
                }
            }
        }
        catch (Exception ex)
        {
            throw new ApplicationException("operation failed!", ex);
        }
        finally
        {
            cmd.Connection.Close();
        }
    }
}

0 个答案:

没有答案