2016-09-09 10 views
0

私は、ボタンを1回クリックするだけで2 csvファイルをエクスポートする必要があります。以下は2つのCSVファイルを生成するために私のコードです:Err_Response_Headers_Multiple_Content_Disposition

using System.Data; 
using System.Data.SqlClient; 
using System.Text; 
using System.IO; 
using System; 
using System.Configuration; 
using System.IO.Packaging; 
using System.Web; 

namespace ExportToCsv 
{ 
    public partial class WebForm1 : System.Web.UI.Page 
    { 
     //Build the CSV file data as a Comma separated string. 
     string csvHeader = string.Empty; 
     //Build the CSV file data as a Comma separated string. 
     string csvDetails = string.Empty;  

     protected void Page_Load(object sender, EventArgs e) 
     { 

     } 

     protected void ExportCSV(object sender, EventArgs e) 
     { 
      string constr = ConfigurationManager.ConnectionStrings["ConStr"].ConnectionString; 
      using (SqlConnection con = new SqlConnection(constr)) 
      { 
       using (SqlCommand cmd = new SqlCommand("select * from mytable-1") 
       { 
        using (SqlDataAdapter sda = new SqlDataAdapter()) 
        { 
         cmd.Connection = con; 
         sda.SelectCommand = cmd; 
         using (DataTable dt = new DataTable()) 
         { 
          sda.Fill(dt); 


          //foreach (DataRow rows in dt.Rows) 
          //{ 
           foreach (DataColumn column in dt.Columns) 
           { 
            //Add the Header row for CSV file. 
            csvHeader += column.ColumnName + ' '; 
           } 


           //Add new line. 
           csvHeader += "\r\n"; 

           foreach (DataRow row in dt.Rows) 
           { 
            foreach (DataColumn column in dt.Columns) 
            { 
             //Add the Data rows. 
             csvHeader += row[column.ColumnName].ToString().Replace(",", ";") + ' '; 
            } 

            //Add new line. 
            csvHeader += "\r\n"; 
           } 
          //} 

           Response.Clear(); 
           Response.Buffer = true; 
           Response.AddHeader("content-disposition", "attachment;filename=HeaderSection.txt"); 
           Response.Charset = ""; 
           Response.ContentType = "application/text"; 
           Response.Output.Write(csvHeader);              
         } 
        }    
       } 

       using (SqlCommand cmd = new SqlCommand("select * from mytable-2") 
       { 
        using (SqlDataAdapter sda = new SqlDataAdapter()) 
        { 
         cmd.Connection = con; 
         sda.SelectCommand = cmd; 
         using (DataTable dt = new DataTable()) 
         { 
          sda.Fill(dt); 


          //foreach (DataRow rows in dt.Rows) 
          //{ 
          foreach (DataColumn column in dt.Columns) 
          { 
           //Add the Header row for CSV file. 
           csvDetails += column.ColumnName + ' '; 
          } 


          //Add new line. 
          csvDetails += "\r\n"; 

          foreach (DataRow row in dt.Rows) 
          { 
           foreach (DataColumn column in dt.Columns) 
           { 
            //Add the Data rows. 
            csvDetails += row[column.ColumnName].ToString().Replace(",", ";") + ' '; 
           } 

           //Add new line. 
           csvDetails += "\r\n"; 
          } 
          //} 

          // Download the CSV file. 
          Response.Clear(); 
          Response.Buffer = true; 
          Response.AddHeader("content-disposition", "attachment;filename=DetailSection.txt"); 
          Response.Charset = ""; 
          Response.ContentType = "application/text"; 
          Response.Output.Write(csvDetails); 
          Response.Flush(); 
          Response.End(); 
         } 
        } 
       } 
      } 

     }  
    } 
} 

私は2つの異なるテーブルからデータを取得し、別々にCSVでデータをエクスポートしています。私は2番目usingの文を削除した場合の機能は、知事に動作しますが、私は二CSVファイルを書き込むために二usingの文を追加しましたように私のブラウザ(クローム)がエラーにErr_Response_Headers_Multiple_Content_Disposition

を与える助けてください。前もって感謝します。

答えて

0

HTTPがサポートしていないため、これを行うことはできません。できることは、両方のファイルを1つのファイル(たとえばZIPファイル)にバンドルしてクライアントに送信することです。

+0

投稿コードを使用してファイルをZIPすることは可能ですか?私は飛行中にファイルを生成しているので、それらをZIPで追加してからシステムにダウンロードしたいと考えています。私はZIPで多くの記事を読んで、すべてのファイルパスを指定してZIPにファイルを追加しました。私の場合、私には道がありません。 –

-1

私は、このエラーは、私の最後の週の全体を盗聴されたこの記事

で解決。このエラーはGoogle Chromeに固有です。他のブラウザは重複したヘッダーを無視するので、Chrome自体のバグではありませんが、これはChromeの問題のようです。これは、あなたやあなたのWebアプリケーションがヘッダーを送信している場合、以下の方法で容易に解決できます。

1 - ""を使用してファイル名を囲みます。すなわち、

header( 'Content-Disposition:attachment; filename = "'。$ file_name。 '"');

代わりに

ヘッダ( 'コンテンツの廃棄:添付ファイル、ファイル名='。$ file_nameの);

2 - アンダースコア(_)

$ file_nameに= str_replace(配列でスペースやカンマ(、)を(置き換え可能な場合は '"'、 "'"、 ''、'、 ')、 '_' 、$ file_nameの);

3 - 明示的にtrueにパラメータを置き換えるオプションの設定により、ヘッダを上書きするためにPHPを伝える

ヘッダ( 'コンテンツタイプ:アプリケーション/ PDF'、TRUE);

Fix for Duplicate Headers Error 349