2009-11-10 85 views
1

我开发了一种设置Crystal Reports连接的方法。设置连接信息时的性能问题Crystal Reports

此方法首先从配置文件抓取连接字符串,创建一个Crystal Reports ConnectionInfo对象。然后

以下代码接管5秒运行:

Dim myTables As Tables = report.Database.Tables 
Dim myTableLogonInfo As TableLogOnInfo = New TableLogOnInfo() 

myTableLogonInfo.ConnectionInfo = myConnectionInfo 

然后,代码接管6秒运行:

For Each myTable As CrystalDecisions.CrystalReports.Engine.Table In myTables 
myTable.ApplyLogOnInfo(myTableLogonInfo) 
    myTable.LogOnInfo.ConnectionInfo.DatabaseName = myTableLogonInfo.ConnectionInfo.DatabaseName 
    myTable.LogOnInfo.ConnectionInfo.ServerName = myTableLogonInfo.ConnectionInfo.ServerName 
    myTable.LogOnInfo.ConnectionInfo.UserID = myTableLogonInfo.ConnectionInfo.UserID 
    myTable.LogOnInfo.ConnectionInfo.Password = myTableLogonInfo.ConnectionInfo.Password 
Next 

这只发生第一次的形式被加载,其后的时间是

335ms(与5349ms相比) 和 52ms(与6228ms相比)

但是,当应用程序重新加载时,会再次发生相同的慢速时间。

我的报告中一般不超过3张。在这种情况下只有一张桌子。

这是目前正在测试中,VS2008和SQLServer2005都在本地运行。在质量保证环境中也会出现同样的问题,即应用程序在客户端上运行,数据库位于同一局域网上的服务器上。

所以我的问题是,我可以提高这部分代码的速度吗?为什么设置报告连接信息需要很长时间?我是否错误地连接到报告?

任何想法?

谢谢,

+0

这需要一段时间来加载大量的晶体库。你确定它不是'report.Load()',这需要很长时间。 – dotjoe 2009-11-10 21:07:12

+0

我有一个StopWatch开始和停止这些代码块,所以我不认为这是Load()方法。我实际上并没有在任何地方调用Load方法,但是我做myReport.ExportToDisk(),然后我也在新的报表窗口中显示报表。 – 2009-11-11 04:46:18

+0

你是否已经在调试模式中检查代码,看看你是否可以缩小到特定的代码行? – Dusty 2009-11-11 15:34:09

回答

0

更好的方法是:

Dim report = New ReportDocument 

Try 
     report.Load(filename, OpenReportMethod.OpenReportByTempCopy) 

     'do this for each unique database connection 
     report.SetDatabaseLogon("user","password","server","database") 

     'continue processing...  

Catch 
     'preserve stack trace 
     Throw 

End Try