我是水晶报道的新手。我已经有这个问题很长一段时间了,似乎无法解决它。我正在做的是运行报告并在响应中发回生成的PDF。
问题是,当我从浏览器运行asp.net页面(运行报告)时,它可以在第一次或第二次正常工作但之后,浏览器只是等待,我没有得到任何响应从服务器返回,甚至没有错误!它只是长时间加载。我甚至干净地重新安装了服务器,但仍然有同样的问题。在初次测试此页面时,我没有遇到此问题。
Crystal报告无法预测,我不确定这是因为报告未正确关闭或连接不正确。
Windows Server 2003 - IIS 这是vb.net页面 -
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Dim connectionInfo As New ConnectionInfo
connectionInfo.ServerName = "UID=abc;PWD=abc;Driver= {SQL Server};Server=" & Page.Request.QueryString("server") & ";Database=" & Page.Request.QueryString("database")
Using report As New ReportDocument
report.Load(Server.MapPath("/report/Crystal/test.rpt"))
report.FileName = Server.MapPath("/report/Crystal/test.rpt")
SetDBLogonForReport(connectionInfo, report)
report.SetParameterValue("param1", Page.Request.QueryString("param1"))
Dim oStream As New MemoryStream()
oStream = report.ExportToStream(CrystalDecisions.Shared.ExportFormatType.PortableDocFormat)
Response.Clear()
Response.Buffer = True
Response.ContentType = "application/pdf"
Response.BinaryWrite(oStream.ToArray())
report.Close()
End Using
Response.Flush()
Response.End()
End Sub
Private Sub SetDBLogonForReport(ByVal connectionInfo As ConnectionInfo, ByVal reportDocument As ReportDocument)
Dim tables As Tables
tables = reportDocument.Database.Tables
For Each table As CrystalDecisions.CrystalReports.Engine.Table In tables
Dim tableLogonInfo As New TableLogOnInfo
tableLogonInfo = table.LogOnInfo
tableLogonInfo.ConnectionInfo = connectionInfo
table.ApplyLogOnInfo(tableLogonInfo)
Next
End Sub
</div>
</form>
答案 0 :(得分:2)
首先,在Page_Init()事件中调用报表连接,而不是Page_Load()。在.NET 2005之前,可以将它放在Page_Load()中。但现在他们改变了内存的管理方式,这可能会给你随机错误,具体取决于CrystalReportViewer内存的状态。将它放在Page_Init()中始终是安全的。
其次,我要做的是删除代码: CrystalReportViewer1.DataBind();
我还会删除RefreshReport()调用b / c,当您为其分配报表对象时,它会自动刷新。但拥有它并没有什么坏处。无论哪种方式,绝对摆脱.DataBind()调用。
希望这些更改能让您的应用程序恢复正常运行。
更多细节请查看以下链接我在一年前遇到同样的问题。希望它有用 LInk