2017-12-07 10 views
1

사용자가 데이터베이스에서 CSV 형식으로 데이터를 다운로드 할 수있는 ASP.NET 페이지를 쓰려고합니다. 코드 뒤에있는 코드를 작성하고 버튼 클릭으로 실행합니다. 여기에 내가 쓴 것입니다 :CSV를 Response.OutputStream에 쓰면 HTML도 쓰여집니다.

private void RunBackup() 
    { 
    Button1.Enabled = false; 

    Response.ContentType = "text/csv"; 
    Response.AddHeader("content-disposition", "attachment; filename=backup.csv"); 

    try 
    { 
     using (SqlConnection connection = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["TestConnectionString"].ConnectionString)) 
     using (StreamWriter writer = new StreamWriter(Response.OutputStream, Encoding.UTF8)) 
     { 
      var queryString = "SELECT * FROM [Data] WHERE [ID] = @id"; 
      SqlCommand command = new SqlCommand(queryString, connection); 
      command.Parameters.Add("@id", SqlDbType.Int).Value = userId; 
      connection.Open(); 
      SqlDataReader reader = command.ExecuteReader(); 

      // Write header row. 
      for (int columnCounter = 0; columnCounter < reader.FieldCount; columnCounter++) 
      { 
       if(columnCounter > 0) 
       { 
        writer.Write(separator); 
       } 
       writer.Write(reader.GetName(columnCounter)); 
      } 
      writer.WriteLine(string.Empty); 

      // Write out the data. 
      while (reader.Read()) 
      { 
       // Write out the column. 
       for (int columnCounter = 0; columnCounter < reader.FieldCount; columnCounter++) 
       { 
        if (columnCounter > 0) 
        { 
         writer.Write(separator); 
        } 
        writer.Write(reader.GetValue(columnCounter).ToString().Replace(",", ";").Replace("\"", " ")); 
       } 
       writer.WriteLine(string.Empty); 
      } 

      HttpContext.Current.ApplicationInstance.CompleteRequest(); 
     } 
    } 
    catch(Exception e) 
    { 

    } 
    finally 
    { 
     Button1.Enabled = true; 
    } 

그것은 사실을 제외하고 위대한 작품뿐만 아니라 내가 CSV는 SQL 데이터와 파일, 그러나 나는 또한 얻을받을 수 있나요 - 파일의 맨 끝에서 - 페이지의 HTML. 나는 그것이 무엇을하고 있는지를 알 수 없다. 비록 그것이 Response 헤더들과 관련이 있거나 또는 Response.OutputStream에 대한 출력과 관련이 있다고 생각한다.

올바른 방향으로 가리키는 것이 좋습니다.

+0

정확히하고 싶습니까? 나는 거의 CSV에 보고서를 쓰고, 오랫동안 탁월하다. –

답변

0

기본적으로 ASP.Net은 양식을 HTML로 렌더링하고 사용자가 반대하지 않는 한 응답에 넣습니다. 그러면 폼이 클라이언트로 반환됩니다. 그래서 다운로드 한 파일에 Html 페이지가 표시됩니다.

RunBackup() 메서드 끝에이 코드를 추가하십시오.

Response.End(); 

이렇게하면 더 많은 내용이 파일에 추가되지 않습니다.

코드에 이미 파이프 라인의 다른 이벤트를 건너 뛰고 요청을 끝내기 위해 준비하는 데 필요한 중요한 부분 인 CompleteRequest()가 있습니다. 응용 프로그램이 출력을 버퍼링하도록 구성된 경우 Response.Flush(); 추가 할 수 있습니다.