2016-08-05 9 views
-1

データベースからExcelファイルをどのように高速にダウンロードできますか?データベースからHTTP経由で25,000以上のレコードをExcelにエクスポート

ボタンをクリックする必要があります。私は以下のコードを使ってみました:

SqlConnection connSql = new SqlConnection(Generic); 
DataSet ds = new DataSet(); 
SqlCommand cmdSql = new SqlCommand(); 
cmdSql.Connection = connSql; 
cmdSql.CommandType = System.Data.CommandType.StoredProcedure; 


cmdSql.CommandText = "sp_GetDetails"; 

cmdSql.Parameters.Add(new SqlParameter("@pageIndex", 0)); 
cmdSql.Parameters.Add(new SqlParameter("@pageSize",rowcount)); 
cmdSql.Parameters.Add(new SqlParameter("@administratordid",  adminid)); 
connSql.Open(); 
SqlDataAdapter da = new SqlDataAdapter(cmdSql); 
da.Fill(ds); 

gvDetails.AllowCustomPaging = false; 
gvDetails.AllowPaging = false; 
gvDetails.DataSource = ds; 
gvDetails.DataBind(); 
connSql.Close(); 

Response.ClearContent(); 
Response.Buffer = true; 
Response.ContentEncoding = System.Text.Encoding.Default; 
Response.AddHeader("content-disposition", string.Format("attachment; filename={0}", fileName)); 

Response.ContentType = contentType; 
    HtmlTextWriter objTW = new HtmlTextWriter(objSW); 
gvDetails.RenderControl(objTW); 
Response.Write(style); 
Response.Write(objSW); 
Response.End(); 

ファイル全体をダウンロードするのに10分かかるのですが。データベース上の行数は25,000です。

これより高速な方法をお勧めします。私は別のコードを試みているが、まだ働いていない。

+0

は、それはまた、輸出を行わずにクエリを実行するために10分かかりますか?その場合は、ストアード・プロシージャーに問題があります。次に、あなたは同時に2つのことをしようとしているように見えます(エクスポートとグリッドビューへのデータバインド?) – VDWWD

答えて

2

ユーザーがダウンロードしてExcelで表示しようとするHTMLとして表をレンダリングする代わりに、実際のExcelファイルを使用して、たとえばEPPLusで生成できます。 LoadFromDataTable

コードがシンプルで、でも方法があります

try { 
    var pck = new OfficeOpenXml.ExcelPackage(); 
    var ws = pck.Workbook.Worksheets.Add("Sheet-Name"); 
    ws.Cells["A1"].LoadFromDataTable(ds.Tables[0], true, TableStyles.Light18); 
    Response.Clear(); 
    Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; 
    Response.AddHeader("content-disposition", string.Format("attachment; filename={0}", fileName)); 
    Response.BinaryWrite(pck.GetAsByteArray()); 
} catch (Exception ex) { 
    //log error 
} 
Response.End(); 
関連する問題