2010-07-10 56 views
0

我正在寫一個相當輕的.Net應用程序查詢Access數據庫並根據結果生成一個Crystal報表-組。我想找出一種方法來簡化從訪問數據庫導入數據到.Net應用程序

該數據集填充方法是一個慢,但易於管理。

問題是當我加載水晶報告。如果傳遞給Crystal的數據集很大,全部爲,則需要永久加載並且用戶放棄。

這是設置報表數據集的代碼:

report.SetDataSource(largeDataSet); 

largeDataSet有兩個表。我已將它們與絕對必要的專欄進行了配對。

結束意外事件發生是

reportViewer.Show(); 

命令火災,但需要的ReportViewer分鐘,實際上顯示的報告。

我不知所措。

我感謝您的幫助和反饋。

+1

有許多的東西,可能會影響性能。你可能不得不在你的問題上更具體一些。 – 2010-07-10 23:33:30

回答

0

我結束了使用一個DataView到第一排序(有效地建立一個非聚集索引),然後從每個表,我需要僅過濾出的列,然後我建立一個新的數據集,並使用dataView.ToTable()方法填充新的數據集。

這爲Crystal Reports設置了一個成本較低的事務。之前的6-10分鐘報告現在在一分鐘內加載。

private DataSet FilterData() 
    { 
     DataSet filteredData = new DataSet("FilteredData"); 
     DataView viewAccount = new DataView(global65DataSet.SET_ACCOUNT_TABLE); 
     viewAccount.Sort = "Number ASC"; 
     viewAccount.RowFilter = " Number >= '" + beginningAcct+"' AND Number <= '" + endAcct + "' "; 

     DataView viewTrans = new DataView(global65DataSet.SET_TRANSACTION_TABLE); 
     viewTrans.Sort = "Transaction_ID ASC, DateTime ASC"; 
     viewTrans.RowFilter = " DateTime >= '" + beginningDate.ToShortDateString() + "' AND DateTime <= '" + 
           endDate.ToShortDateString() + "'"; 

     filteredData.Tables.Add(viewAccount.ToTable()); 
     filteredData.Tables.Add(viewTrans.ToTable()); 
     filteredData.Tables[0].TableName = "SET_ACCOUNT_TABLE"; 
     filteredData.Tables[1].TableName = "SET_TRANSACTION_TABLE"; 

     return filteredData; 
    } 

有可能是一個更好的,更面向對象的方式來做到這一點,但這個工程:)

相關問題