2014-10-29 18 views
0

我正在填充來自遠程服務器的數千條記錄的sqldataadapter。在此期間,應用程序凍結,直到抓取數據結束。有時候,根據服務器的可用性,有時需要花費幾分鐘的時間,所以用戶永遠不知道有多少記錄被下載以及何時完成該過程。出於這個原因,我想實現一些計數器多少記錄剩下來完成下載過程。控制在sqldataadapter中填充了多少recrocds

這是我填的SqlDataAdapter:

 void FillDataAdapter(string sQuery) 
     { 
      SqlDataAdapter mySqlDataAdapter; 
      SqlCommandBuilder mySqlCommandBuilder; 
      DataTable dataTable; 

      mySqlDataAdapter = new SqlDataAdapter(sQuery, this.connection); 
      mySqlCommandBuilder = new SqlCommandBuilder(mySqlDataAdapter); 
      mySqlDataAdapter.SelectCommand.CommandTimeout = 30; 

      dataTable = new DataTable();      
      mySqlDataAdapter.Fill(dataTable); 
     } 

在此行中的應用freezs直到填充完成:

mySqlDataAdapter.Fill(dataTable); 

填充方法有int返回的數據類型,但我只能得到記錄數在數據適配器填充完成後。在哪種方式下,我可以在dataadapter中獲得當前的記錄數量?

回答

0

我覺得這是不可能的,但你可以利用

public int Fill(
    int startRecord, 
    int maxRecords, 
    params DataTable[] dataTables 
) 

超載填充的方法來得到你想要記錄的編號。

0

您可以在此處使用線程池來異步調用該數據庫連接。以下是您的幫助鏈接。 http://msdn.microsoft.com/en-us/library/3dasc8as.aspx http://www.codeproject.com/Articles/7933/Smart-Thread-Pool

如果計數器在這裏使用,那麼也必須要等到所有的數據被取出。但是如果你使用線程池,那麼你不必等待執行那部分代碼。當執行這部分代碼時,其他代碼部分也將被執行。當所有數據都被提取後,您可以顯示當時的所有數據。您不必擔心無響應或服務器繁忙的問題。