我想找出一种方法来简化从访问数据库导入数据到.Net应用程序
我正在写一个相当轻的.Net应用程序查询Access数据库并根据结果生成一个Crystal报表-组。我想找出一种方法来简化从访问数据库导入数据到.Net应用程序
该数据集填充方法是一个小慢,但易于管理。
问题是当我加载水晶报告。如果传递给Crystal的数据集很大,全部为,则需要永久加载并且用户放弃。
这是设置报表数据集的代码:
report.SetDataSource(largeDataSet);
largeDataSet有两个表。我已将它们与绝对必要的专栏进行了配对。
结束意外事件发生是
reportViewer.Show();
命令火灾,但需要的ReportViewer分钟,实际上显示的报告。
我不知所措。
我感谢您的帮助和反馈。
我结束了使用一个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
谢谢,这个建议帮助我缩小了问题范围。 – Joe 2010-07-12 20:47:49
有许多的东西,可能会影响性能。你可能不得不在你的问题上更具体一些。 – 2010-07-10 23:33:30