2016-08-01 15 views
0

我正在將大型DataTable導出爲Excel工作表(.xls)格式。我在這裏調用存儲過程,它返回DataTable。該存儲過程用於返回具有93列的7,50,000行。將大數據導出爲xls格式:系統內存不足異常

在後端,如果我傳遞存儲過程的參數,則需要8分鐘才能完成該過程,因爲這是一個漫長的過程。

但是,當我從前端調用過程時,將記錄分配給DataTable時,會發生「系統內存不足」異常。

所以當我谷歌它,我來了解它是因爲大小超過服務器RAM大小,所以它會引發此異常。 當我導出小型DataTable時,它工作正常。

這是什麼替代方法?任何人都建議我。下面是我的代碼,

C#:

  DataTable dt = BindDatatable(); 
      Response.ClearContent(); 
      Response.Buffer = true; 
      Response.AddHeader("content-disposition", string.Format("attachment; filename={0}", "MBQ_Auto.xls")); 
      Response.ContentType = "application/ms-excel"; 
      //Response.ContentType = "application/octet-stream"; 
      //Response.ContentType = "text/tab-separated-values"; 
      string str = string.Empty; 
      foreach (DataColumn dtcol in dt.Columns) 
      { 
       Response.Write(str + dtcol.ColumnName); 
       str = "\t"; 
      } 
      Response.Write("\n"); 
      int rowCount = 0; 
      foreach (DataRow dr in dt.Rows) 
      { 
       str = ""; 
       for (int j = 0; j < dt.Columns.Count; j++) 
       { 
        Response.Write(str + Convert.ToString(dr[j])); 
        str = "\t"; 
       } 
       Response.Write("\n"); 
       if (unchecked(++rowCount % 1024 == 0)) 
        Response.Flush(); 
      } 
      Response.End(); 
+0

如果它對於服務器內存來說太大,它會對客戶端做什麼? (如果其中一個字段包含製表符,會發生什麼情況?) – Richard

+1

xls文件格式不支持超過65,000行。要獲得更多行,您需要使用xlsx。 – Linkan

+0

我使用xls輸出超過2萬個記錄。 – thevan

回答

1

你不應該爲這種問題使用數據表。 DataTable將整個數據存儲在內存中。

您應該使用DataReader從數據庫中提取行。