我想找出一种方法来简化从访问数据库导入数据到.Net应用程序

我想找出一种方法来简化从访问数据库导入数据到.Net应用程序

问题描述:

我正在写一个相当轻的.Net应用程序查询Access数据库并根据结果生成一个Crystal报表-组。我想找出一种方法来简化从访问数据库导入数据到.Net应用程序

该数据集填充方法是一个慢,但易于管理。

问题是当我加载水晶报告。如果传递给Crystal的数据集很大,全部为,则需要永久加载并且用户放弃。

这是设置报表数据集的代码:

report.SetDataSource(largeDataSet); 

largeDataSet有两个表。我已将它们与绝对必要的专栏进行了配对。

结束意外事件发生是

reportViewer.Show(); 

命令火灾,但需要的ReportViewer分钟,实际上显示的报告。

我不知所措。

我感谢您的帮助和反馈。

+1

有许多的东西,可能会影响性能。你可能不得不在你的问题上更具体一些。 – 2010-07-10 23:33:30

我结束了使用一个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; 
    } 

有可能是一个更好的,更面向对象的方式来做到这一点,但这个工程:)

我建议你试试性能分析器应用程序。 ANTS性能分析器是一个很好的。

http://www.red-gate.com/products/ants_performance_profiler/index.htm

+0

谢谢,这个建议帮助我缩小了问题范围。 – Joe 2010-07-12 20:47:49