包含大数据的水晶报表需要很长时间才能加载
本文关键字:长时间 加载 数据 水晶 报表 包含大 | 更新日期: 2023-09-27 18:36:05
我目前正在将Windows应用程序从VB6升级到 VB.NET。该应用程序的组件之一包括水晶报告。总的来说,我对VB和Crystal Reports非常陌生,所以我需要一些帮助。
让我首先说我得到了报告来提取正确的数据,并且没有语法错误,但是当我尝试提取包含大量记录的数据时,加载需要很长时间。 例如,其中一个查询包括返回的 16000+ 行,在 VB6 版本中需要 ~1.5 秒,但在 .Net 版本中需要 18 分钟。我相信我可以做一些事情来提高报告的效率,但由于我还没有充分使用它,我需要帮助才能走上正轨。当报告试图提取少量数据时,我没有遇到任何问题。
为了生成报告,我正在使用数据集,我认为这是减慢加载时间的部分。下面是我设置 SQL 查询的方式和设置数据集的方式的示例。
sSQLQry = “SELECT [COLUMN_NAMES] from Table1, Table2, Table3, Table4 WHERE [condition] ORDERBY col1,col2,col3 ASC
cnn = New SqlConnection(connectionString)
cnn.Open()
Dim dscmd As New SqlDataAdapter(sSQLQry, cnn)
Dim ds As New my_dataset
dscmd.Fill(ds, "table1")
dscmd.Fill(ds, "table2")
dscmd.Fill(ds, "table3")
dscmd.Fill(ds, "table4")
crystalreport1.SetDataSource(ds)
CrystalReportViewer1.Height = Me.Height
CrystalReportViewer1.Width = Me.Width
CrystalReportViewer1.Show()
CrystalReportViewer1.ReportSource = crystalreport1
现在我认为它缓慢的原因是因为 4 种填充方法,但我不确定如何解决这个问题。任何帮助将不胜感激。
试试这段代码,我在 C# 和 Oracle 数据库中使用它,但我确信它可以帮助你:
CRAXDRT.DatabaseTable T;
for (int i = 1; i <= report1.Database.Tables.Count; i++)
{
T = (CRAXDRT.DatabaseTable)report1.Database.Tables[i];
CRAXDRT.ConnectionProperties cps = T.ConnectionProperties;
CRAXDRT.ConnectionProperty cp =
(CRAXDRT.ConnectionProperty)cps["User ID"];
cp.Value = "Username" ;
cp = (CRAXDRT.ConnectionProperty)cps["Password"];
cp.Value = "Password" ;
cp = (CRAXDRT.ConnectionProperty)cps["Data Source"];
cp.Value = "DataSource" ;
T.SetLogOnInfo("DataSource", "", "Username", "Password");
}
Crystal Reports 存在 ADO.NET 数据源中多个表的已知问题。 链接数据真的很慢。
为了解决这个问题,我们必须做的是在单个表(平面文件)中创建数据,然后报告非常快。他们一直遇到这个问题,并且没有采取任何措施,所以不要屏住呼吸,他们会尽快解决它。
请参阅此 SAP ADO.NET 数据源缓慢