2016-08-01 4 views
0

Я экспортирую большой DataTable в формат листа Excel (.xls). Здесь я вызываю хранимую процедуру, которая возвращает DataTable. Хранимая процедура используется для возврата 7 50 000 строк с 93 столбцами.Экспорт больших данных в формат xls: Исходящая из системы Исключение

В конце, если я передаю параметры хранимой процедуры, для завершения процесса требуется 8 минут, так как это длительный процесс.

Но когда я вызываю процедуру с переднего конца, при назначении записей в DataTable возникает исключение «System Out Of Memory».

Так что, когда я google, я узнал, что это потому, что размер превышает размер ОЗУ сервера, поэтому он выдает это исключение. Когда я экспортирую небольшой 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

Я экспортирую более 2 записей lakhs с помощью xls. – thevan

ответ

1

Вы не должны использовать DataTable для такого рода проблемы. DataTable сохраняет все данные в памяти.

Для извлечения строк из базы данных следует использовать DataReader.

Смежные вопросы