Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将数据表导出到csv并导入到客户端,而不保存在服务器中_C#_Asp.net_Csv_Export - Fatal编程技术网

C# 将数据表导出到csv并导入到客户端,而不保存在服务器中

C# 将数据表导出到csv并导入到客户端,而不保存在服务器中,c#,asp.net,csv,export,C#,Asp.net,Csv,Export,我想将数据导出为csv格式,然后允许用户选择打开/保存到客户端系统。但csv不应保存在服务器中 我使用了以下代码: this.Response.Clear(); this.Response.ContentType = "application/octet-stream"; this.Response.AddHeader("Content-Disposition", "attachment; filename=\"" + sFileName + "\""); this.Response.Trans

我想将数据导出为csv格式,然后允许用户选择打开/保存到客户端系统。但csv不应保存在服务器中

我使用了以下代码:

this.Response.Clear();
this.Response.ContentType = "application/octet-stream";
this.Response.AddHeader("Content-Disposition", "attachment; filename=\"" + sFileName + "\"");
this.Response.TransmitFile(FilePath);
this.Response.Flush();
this.Response.End();

但这不起作用。

正如David所建议的,只需尝试将您的CSV内容直接流式传输到响应:-

        Response.Clear();
        Response.AddHeader("content-disposition", "attachment; filename=data.csv");
        Response.ContentType = "text/csv";
        Response.Write(stringContainingCSVData);
        Response.End();

在DataTable中获取数据并使用此函数。它很好用

public void ExportToCSVFile(DataTable dt, string file_name)
    {
        Response.Clear();
        Response.Buffer = true;
        Response.AddHeader("content-disposition",
         "attachment;filename='" + file_name + "'.csv");
        Response.Charset = "";
        Response.ContentType = "application/text";
        StringBuilder sb = new StringBuilder();
        for (int k = 0; k < dt.Columns.Count; k++)
        {
            sb.Append(dt.Columns[k].ColumnName + ',');
        }
        sb.Append("\r\n");
        for (int i = 0; i < dt.Rows.Count; i++)
        {
            for (int k = 0; k < dt.Columns.Count; k++)
            {
                sb.Append(dt.Rows[i][k].ToString() + ',');
            }
            sb.Append("\r\n");
        }
        Response.Output.Write(sb.ToString());
        Response.Flush();
        Response.End();
    }
public void ExportToCSVFile(数据表dt,字符串文件\u名称)
{
Response.Clear();
Response.Buffer=true;
Response.AddHeader(“内容处置”,
“附件;文件名=”+“文件名+”.csv”);
响应。Charset=“”;
Response.ContentType=“应用程序/文本”;
StringBuilder sb=新的StringBuilder();
对于(int k=0;k
很明显,如果服务器上没有文件,则
Response.TransmitFile()
将“无法工作”。您的CSV数据在哪里?只需将其直接写入响应。您能否解释更多有关使用示例将csv直接流式传输到响应的信息。上面的代码就是一个示例?“stringContainingCSVData”是csv数据本身。感谢您的帮助。这段代码我已经尝试过了,但是Response.End()给出了错误“无法计算表达式,因为代码已优化或本机框架位于调用堆栈顶部”。如果我将Response.End()替换为Response.ClearContent(),则会引发另一个错误“Sys.WebForms.PageRequestManagerParserErrorException:无法解析从服务器收到的消息。”您无法从UpdatePanel内部执行此操作-无论如何都不容易。如果触发操作的按钮位于UpdatePanel内部,则不需要(相当多的)额外工作,就无法以这种方式传输内容。