2014-07-22 69 views
1

將數據錶轉換爲Csv有一些問題我試圖將數據錶轉換爲csv格式。代碼工作正常並獲取csv。但問題是有一些異常顯示catch塊在Response.End()之後;在Response.End()

這裏是我的代碼

public void GetCSV(DataTable dt) 
    { 
     StringBuilder sb = new StringBuilder(); 
     IEnumerable<string> columnNames1 = dt.Columns.Cast<DataColumn>(). 
      Select(column => column.ColumnName); 
     sb.AppendLine(string.Join(",", columnNames1)); 
     foreach (DataRow row in dt.Rows) 
     { 
      IEnumerable<string> fields = row.ItemArray.Select(field => field.ToString()); 
      foreach (var item in fields) 
      { 
       sb.AppendFormat("\"{0}\",", item.Replace("\"", "\"\"")); 
      } 
      sb = sb.Remove(sb.Length - 1, 1); 
      sb.Append("\n"); 
      //sb.AppendLine(string.Join(",", fields)); 
     } 

     string attachment1 = "attachment; filename=Application_Data.csv"; 
     Response.ClearContent(); 
     Response.AddHeader("content-disposition", attachment1); 
     Response.ContentType = "application/csv;charset=utf-8"; 
     Response.Charset = "utf-8"; 
     Response.Write(sb.ToString()); 
     Response.End(); 
    } 

我只是調試和檢查。然後到Response.End的遇到的問題 誤差表現爲 Unable to evaluate expression because the code is optimized or a native frame is on top of the call stack

任何一個可以知道什麼是issue.Thanks提前尋求幫助。

+0

嘗試 http://www.codeproject.com/Tips/665519/Writing-a-DataTable-to-a-CSV-file –

+1

看看這個 http://stackoverflow.com/questions/2041482/unable -to-表達式求因爲最代碼被優化或 - 一個本地幀-是 – GMD

回答

1
var lines = new List<string>(); 

string[] columnNames = dataTable.Columns.Cast<datacolumn>(). 
            Select(column => column.ColumnName). 
            ToArray(); 

var header = string.Join(",", columnNames); 
lines.Add(header); 

var valueLines = dt.AsEnumerable() 
        .Select(row => string.Join(",", row.ItemArray));    
lines.AddRange(valueLines); 

File.WriteAllLines("excel.csv",lines);</datacolumn></string> 
2

在這個函數試試這個

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(); 
     } 

通數據表和文件名。