Crystal Report lance 'Impossible d'ouvrir la connection.' seulement en postback

J'ai créé un rapport Crystal en utilisant la méthode "pull" pour get des données de SQL Server Express. J'exporte le rapport en pdf. Cela fonctionne bien, mais uniquement sur pageLoad. Je reçois cette erreur chaque fois que j'essaie d'exporter le rapport sur une publication.

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, Ssortingng attachmentName) +211 CrystalDecisions.CrystalReports.Engine.ReportDocument.ExportToHttpResponse(ExportFormatType formatType, HttpResponse response, Boolean asAttachment, Ssortingng 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 

Voici mon code sur 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 

J'obtiens la même erreur quand j'exécute ce code dans un clic de button, ou même dans pageload if ispostback clause if ispostback .

J'ai essayé d'exécuter ce code dans prerender, init etc … sans succès.

Crystal Reports version 13.0, .NET 3.5, SQL Server 2008 Express, VS 2010

Toute aide serait très appréciée.

C'est un problème commun avec l'intégration de Crystal Reports dans les pages ASP. Essentiellement, les détails d'authentification sont réinitialisés sur une publication et doivent être réaffectés dans le gestionnaire Page_Init. Cet article fournit des exemples de code et un lien vers MSDN expliquant la class ConnectionInfo et comment cela fonctionne dans ce context. Dans le cas où ce lien meurt, la solution est en deux étapes:

D'abord, importez-les:

 Imports CrystalDecisions.Shared Imports CrystalDecisions.CrystalReports.Engine 

Puis, dans le gestionnaire Page_Init , Page_Init informations de connection:

 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 

Remarque – SO n'aime pas les commentaires VB et veut les appeler (et les lignes suivantes) des strings littérales à la place. Utilisé l'opérateur de commentaire C / Java à la place.

  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 

'' '' '' '' '' '' '' '' '' '' 'Après de nombreuses années de développement j'ai trouvé la solution …. Enjoy …