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
任何帮助都将不胜感激。
这是在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
经过多年的发展,我找到了解决方案。。。。享受