包含大数据的水晶报表需要很长时间才能加载

本文关键字:长时间 加载 数据 水晶 报表 包含大 | 更新日期: 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 数据源缓慢