2017-06-14 147 views
1

在我的c#mvc 4應用程序項目中,我們需要從sqlquery中取數據然後填入C#數據表。 我們必須填寫超過5百萬行和12列的數據表。datatable加載大數據c#

如果數據已經< 100萬的申請需要3分鐘。如果它> 100萬系統被吊死,則爲 。

這是我正在使用的代碼。

public DataTable GetTheData() 
    { 
     DataTable dtDataTablesList = new DataTable(); 
     string NewconnectionString ="Mycooectionstring"; 
     SqlConnection spContentConn = new SqlConnection(NewconnectionString); 
     string sqlselectQuery = "select * from table"; 
     try 
     { 
      spContentConn.Open(); 
      SqlCommand sqlCmd = new SqlCommand(sqlselectQuery, spContentConn); 
      sqlCmd.CommandTimeout = 0; 
      sqlCmd.CommandType = CommandType.Text; 
      sqlCmd.ExecuteNonQuery(); 
      SqlDataAdapter adptr = new SqlDataAdapter(sqlCmd); 
      adptr.Fill(dtDataTablesList); 
      spContentConn.Close(); 
     } 
     catch (Exception ex) 
     { 
      throw ex; 
     } 
     finally 
     { 
      if (spContentConn != null) 
       spContentConn.Dispose(); 
     } 
     return dtDataTablesList; 
    } 
+0

您打算如何處理1M記錄?你無法在任何地方展示他們。處理它們是數據庫的用途。 Web應用程序永遠不會運行得更快,因爲寫入的查詢具有合適的索引。你想做什麼? –

+0

順便說一句,你應該使用'use'塊代替這個'try/finally'和外部的'catch',它只是簡單地打破了調用堆棧。 –

回答

1

爲什麼要求每次要顯示10萬記錄?你應該使用分頁和限制記錄的數量。我建議如果你有這麼多的大記錄顯示,那麼你一次最多應該顯示500條記錄。即使500條記錄很大,所以你可以減少no。通過與您的團隊和客戶討論記錄。

即使您設法在相當長的時間內加載所有這些記錄,瀏覽器將無法處理那麼多記錄並且可能會崩潰。但這只是我的假設沒有經過測試和驗證。

你可以參考下面的SQL代碼爲分頁

create table #TestTable(
PK int primary key, 
Name nvarchar(50) 
) 

insert into #TestTable (PK, Name) values 
(1, 'Name1'), 
(4, 'Name4'), 
(6, 'Name6') 

select * from 
(
select row_number() over(ORDER BY pk) SN, * from #TestTable 
) temp 
where SN>=1 and SN<=500 

1和500應該是動態的。在第1頁中,您在第2頁中傳遞1和500,您應該傳遞501和1000.