2017-01-25 1 views
0

위해 SqlDataReader 개체에서 테이블 형식으로 반환되지 않는 것은 테이블 구조데이터는 CSV 파일 다운로드 여기

protected void Write_CSV_From_Recordset2(SqlDataReader oDataReader) 
{ 
    StringBuilder builder = new StringBuilder(); 

    List<string> columnNames = new List<string>(); 
    List<string> rows = new List<string>(); 

    for (int i = 0; i < oDataReader.FieldCount; i++) 
    { 
     string tmpColumnName = oDataReader.GetName(i); 
     columnNames.Add(tmpColumnName); 
    } 

    builder.Append(string.Join(",", columnNames.ToArray())).Append("\n"); 

    List<string> currentRow = new List<string>(); 

    while (oDataReader.Read()) 
    { 
     ////base.WriteLog(oDataReader.FieldCount + "fieldcount"); 
     for (int i = 0; i < oDataReader.FieldCount; i++) 
     { 
      object item = oDataReader[i]; 
      currentRow.Add(item.ToString()); 
     } 
    } 

    //builder.Append(string.Join("\n", rows.ToArray())).Append("\n"); 
    rows.Add(string.Join(",", currentRow.ToArray())); 
    builder.Append(string.Join(",", rows.ToArray())).Append("\n"); 

    Response.Clear(); 
    Response.ContentType = "text/csv"; 
    Response.AddHeader("Content-Disposition", "attachment;filename=pretestscore.csv"); 
    Response.Write(builder.ToString()); 
    Response.End(); 
} 

문제가 있다는 것이다 동안 출력 가 반환되기 시작하면

while (oDataReader.Read()) 

이 값 a를 반환합니다. 반환되는 것처럼

281063,70,7091,85,TEST,200,test,NULL 

실제로 테이블에서 데이터를 가져 오는 방법은 무엇입니까?

내 코드의 실수는 어디에 있습니까?

제안 사항?

답변

1
protected void Write_CSV_From_Recordset2(SqlDataReader oDataReader) 
    { 
     string strCSV = string.Empty; 

     for (int i = 0; i < oDataReader.FieldCount; i++) 
     { 
      string tmpColumnName = oDataReader.GetName(i); 

      strCSV += tmpColumnName + ','; 
     } 

     strCSV += "\r\n"; 



     while (oDataReader.Read()) 
     { 


      for (int i = 0; i < oDataReader.FieldCount; i++) 
      { 
       object item = oDataReader[i]; 

       strCSV += item.ToString().Replace(",", ";") + ','; 

      } 


      strCSV += "\r\n"; 

     } 


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


    } 
+0

좋습니다. 정확히 내가 좋아하는 말처럼 –

0

루프를 for 루프 또는 while 루프로 구분하여 직접 코드를 작성할 수 있습니다.

당신은이 코드를 참조 할 수 있습니다 당신은

string s;     
while (reader.Read()) 
{ 
    if(!String.IsNullOrEmpty(s)){ 
     s += ", "; 
    } 
    s += reader["name"].ToString(); 
} 
+0

당신이 코드를 쓸 수있는 아이디어를 얻을 것이다 ?? 방법 ?? –

+0

편집 한 답변을 확인할 수 있습니다. 당신은 당신의 필요에 따라 당신 자신을해야합니다. –

+0

루프에 추가하는 방법을 알려주시겠습니까 ?? –