0

我目前正在将 Windows 应用程序从 VB6 升级到 VB.NET。该应用程序的组件之一包括 Crystal Reports。我对 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 种填充方法,但我不知道如何解决这个问题。任何帮助是极大的赞赏。

4

2 回答 2

0

试试这段代码,我在 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");
        }
于 2013-10-21T05:46:16.223 回答
0

Crystal Reports 在 ADO.NET 数据源中存在多个表的已知问题。链接数据真的很慢。

为了解决这个问题,我们必须做的是在单个表(平面文件)中创建数据,然后报告速度非常快。他们一直有这个问题并且没有做任何事情,所以不要屏住呼吸,他们会很快解决这个问题。

请参阅此SAP ADO.NET 数据源慢

于 2013-10-21T14:48:12.527 回答