2016-08-01 4 views
0

Ich exportiere eine große DataTable in ein Excel-Arbeitsblatt (.xls) Format. Ich rufe hier gespeicherte Prozedur auf, die die DataTable zurückgibt. Die gespeicherte Prozedur, die verwendet wird, um 7.50.000 Zeilen mit 93 Spalten zurückzugeben.Exportieren großer Daten in XLS-Format: System nicht genügend Arbeitsspeicher Ausnahme

Im Backend, wenn ich die Parameter für die gespeicherte Prozedur übergeben, dauert es 8 Minuten, um den Prozess abzuschließen, da es ein langer Prozess ist.

Aber wenn ich die Prozedur von der Front-End aufrufen, während die Datensätze der DataTable zuweisen, "System Out of Memory" Ausnahme auftritt.

Also wenn ich es google, kam ich zu wissen, dass es ist, weil die Größe die Größe des Servers RAM übersteigt, so dass es diese Ausnahme wirft. Wenn ich kleine DataTable exportiere, funktioniert es gut.

Was ist der alternative Weg dafür? Jeder schlägt mich vor. Unten ist mein Code,

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

Wenn es zu groß für den Serverspeicher ist, was wird es mit dem Client tun? (Und was passiert, wenn eines der Felder ein Tab-Zeichen enthält?) – Richard

+1

Das xls-Dateiformat unterstützt nicht mehr als nur über 65.000 Zeilen. Um mehr Zeilen zu haben, müssen Sie xlsx verwenden. – Linkan

+0

Ich exportiere mehr als 2 Lakhs Datensätze mit xls. – thevan

Antwort

1

Sie nicht für diese Art von Problem Datatable verwenden sollten. DataTable speichert die gesamten Daten im Speicher.

Sie sollten die DataReader verwenden, um Zeilen aus der Datenbank abzurufen.

Verwandte Themen