asp.net中的水晶报告 - 页面不断加载

时间:2012-09-20 16:18:45

标签: asp.net vb.net crystal-reports windows-server-2003 crystal-reports-xi

我是水晶报道的新手。我已经有这个问题很长一段时间了,似乎无法解决它。我正在做的是运行报告并在响应中发回生成的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>

1 个答案:

答案 0 :(得分:2)

首先,在Page_Init()事件中调用报表连接,而不是Page_Load()。在.NET 2005之前,可以将它放在Page_Load()中。但现在他们改变了内存的管理方式,这可能会给你随机错误,具体取决于CrystalReportViewer内存的状态。将它放在Page_Init()中始终是安全的。

其次,我要做的是删除代码: CrystalReportViewer1.DataBind();

我还会删除RefreshReport()调用b / c,当您为其分配报表对象时,它会自动刷新。但拥有它并没有什么坏处。无论哪种方式,绝对摆脱.DataBind()调用。

希望这些更改能让您的应用程序恢复正常运行。

更多细节请查看以下链接我在一年前遇到同样的问题。希望它有用 LInk