Crystal Report抛出';无法打开连接';仅在回发时

本文关键字:连接 抛出 Report Crystal | 更新日期: 2023-09-27 18:25:20

我使用"pull"方法创建了一个Crystal Report来从SQL Server Express获取数据。我将报告导出为pdf格式。它运行良好,但仅在pageLoad上运行。每当我尝试在回发时导出报告时,都会出现此错误。

Failed to open the connection.
Details:  [Database Vendor Code: 4060 ]Failed to open the connection.
CrystalReportPull {2B7D5D2A-C29F-4F27-AFAD-EEAECD909D08}.rpt
Details:  [Database Vendor Code: 4060 ] 
  Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 
 Exception Details: System.Runtime.InteropServices.COMException: Failed to open the connection.
Details:  [Database Vendor Code: 4060 ]Failed to open the connection.
CrystalReportPull {2B7D5D2A-C29F-4F27-AFAD-EEAECD909D08}.rpt
Details:  [Database Vendor Code: 4060 ]
Source Error: 
Line 58:                 CrystalTable.ApplyLogOnInfo(logonInfo)
Line 59:             Next
Line 60:             report.ExportToHttpResponse(ExportFormatType.PortableDocFormat, Response, True, "ExportedReport")
Line 61:             report.Dispose()
Line 62:         End If
 Source File:  C:'Users'boruch'Dropbox'Korns-ConnectionStr'reports'CreateReport.aspx.vb    Line:  60 
Stack Trace: 
[COMException (0x800002f4): Failed to open the connection.
Details:  [Database Vendor Code: 4060 ]
Failed to open the connection.
CrystalReportPull {2B7D5D2A-C29F-4F27-AFAD-EEAECD909D08}.rpt
Details:  [Database Vendor Code: 4060 ]]
   CrystalDecisions.ReportAppServer.Controllers.ReportSourceClass.Export(ExportOptions pExportOptions, RequestContext pRequestContext) +0
   CrystalDecisions.ReportSource.EromReportSourceBase.ExportToStream(ExportRequestContext reqContext) +525
[InternalException: Failed to open the connection.
Details:  [Database Vendor Code: 4060 ]
Failed to open the connection.
CrystalReportPull {2B7D5D2A-C29F-4F27-AFAD-EEAECD909D08}.rpt
Details:  [Database Vendor Code: 4060 ]]
   CrystalDecisions.ReportAppServer.ConvertDotNetToErom.ThrowDotNetException(Exception e) +346
   CrystalDecisions.ReportSource.EromReportSourceBase.ExportToStream(ExportRequestContext reqContext) +627
   CrystalDecisions.CrystalReports.Engine.FormatEngine.ExportToStream(ExportRequestContext reqContext) +1203
   CrystalDecisions.CrystalReports.Engine.ReportDocument.ExportToStream(ExportOptions options) +150
   CrystalDecisions.CrystalReports.Engine.ReportDocument.ExportToHttpResponse(ExportOptions options, HttpResponse response, Boolean asAttachment, String attachmentName) +211
   CrystalDecisions.CrystalReports.Engine.ReportDocument.ExportToHttpResponse(ExportFormatType formatType, HttpResponse response, Boolean asAttachment, String attachmentName) +240
   reports_CreateReport.Page_SaveStateComplete(Object sender, EventArgs e) in C:'Users'boruch'Dropbox'Korns-ConnectionStr'reports'CreateReport.aspx.vb:60
   System.Web.UI.Page.OnSaveStateComplete(EventArgs e) +9644490
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1282

这是我在vb.net中的代码:

txt_from.Text = Now.Date.AddYears(-1)
        txt_to.Text = Now.Date
        If IsPostBack Then
            Dim report As New ReportDocument()
            report.Load(Server.MapPath("~/reports/CrystalReportPull.rpt"), OpenReportMethod.OpenReportByTempCopy)
            Dim custID As Integer = -1
            If ddl_Customer.SelectedValue <> "" Then
                custID = CInt(ddl_Customer.SelectedValue)
            End If
            report.SetParameterValue(0, txt_from.Text)
            report.SetParameterValue(1, txt_to.Text)
            report.SetParameterValue(2, custID)

            Dim logonInfo As New CrystalDecisions.Shared.TableLogOnInfo()
            Dim CrystalTable As CrystalDecisions.CrystalReports.Engine.Table
            For Each CrystalTable In report.Database.Tables
                logonInfo = CrystalTable.LogOnInfo
                logonInfo.ConnectionInfo.ServerName = "BORUCH-PC'SQLEXPRESS"
                logonInfo.ConnectionInfo.DatabaseName = ""
                logonInfo.ConnectionInfo.UserID = ""
                logonInfo.ConnectionInfo.Password = ""
                CrystalTable.ApplyLogOnInfo(logonInfo)
            Next
            report.ExportToHttpResponse(ExportFormatType.PortableDocFormat, Response, True, "ExportedReport")
            report.Dispose()
        End If

当我在按钮点击中运行这段代码时,或者如果我在if ispostback子句中换行,甚至在页面加载中运行时,我也会遇到同样的错误。

我尝试过在prerender、init等中运行此代码,但没有成功。

Crystal Reports 13.0版、.NET 3.5、SQL Server 2008 Express、VS 2010

任何帮助都将不胜感激。

Crystal Report抛出';无法打开连接';仅在回发时

这是在ASP页面中嵌入Crystal Reports时常见的问题。本质上,身份验证详细信息在回发时重置,并且需要在Page_Init处理程序中重新分配。本文提供了代码示例和MSDN链接,解释ConnectionInfo类及其在该上下文中的工作方式。如果链接失效,解决方案分为两个步骤:

首先,导入这些:

Imports CrystalDecisions.Shared
Imports CrystalDecisions.CrystalReports.Engine

然后,在Page_Init处理程序中,重新应用连接信息:

Dim myConnectionInfo As ConnectionInfo = New ConnectionInfo()
Dim myReport As New ReportDocument()
myReport.Load(Server.MapPath("ReportName")) -- name of the crystal report
Dim myTables As Tables = myReport.Database.Tables
For Each myTable As CrystalDecisions.CrystalReports.Engine.Table In myTables
  Dim myTableLogonInfo As TableLogOnInfo = myTable.LogOnInfo
  myConnectionInfo.ServerName = "" -- <SQL servername>
  myConnectionInfo.DatabaseName = "" -- leave database name blank
  myConnectionInfo.UserID = "" -- username
  myConnectionInfo.Password = "" -- password
  myTableLogonInfo.ConnectionInfo = myConnectionInfo
  myTable.ApplyLogOnInfo(myTableLogonInfo)
Next
CrystalReportViewer1.ReportSource = myReport

请注意,SO不喜欢VB注释,而是希望将它们(以及随后的行)称为文字字符串。改为使用C/Java注释运算符。

    Try
        Dim myConnectionInfo As ConnectionInfo = New ConnectionInfo()
        Dim rpt As New rptCardPrinting()
        Dim myTables As Tables = rpt.Database.Tables
        For Each myTable As CrystalDecisions.CrystalReports.Engine.Table In myTables
            Dim myTableLogonInfo As TableLogOnInfo = myTable.LogOnInfo
            myConnectionInfo.ServerName = sqlconn
            myConnectionInfo.DatabaseName = ""
            myConnectionInfo.UserID = sqluser
            myConnectionInfo.Password = sqlpass
            myTableLogonInfo.ConnectionInfo = myConnectionInfo
            myTable.ApplyLogOnInfo(myTableLogonInfo)
        Next
        frmReportViewer.CrystalReportViewer1.ReportSource = rpt
        rpt.SetParameterValue("prt", txtCnicPassport.Text)
        rpt.PrintToPrinter(1, False, 0, 0)
        rpt.Close()
        rpt.Dispose()

    Catch ex As Exception
        MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
    End Try
    '' ''endreport

经过多年的发展,我找到了解决方案。。。。享受