Hallo zusammen,
wieder einmal das alte Thema:
Innerhalb der Entwicklungsumgebung mit VS2013 läuft die Erstellung des Crystal Reports und das Erzeugen und speichern des PDF's einwandfrei.
Veröffentliche ich die ASP.NET Seite im IIS, geht es natürlich nicht - weder auf meinem Entwicklungsrechner, noch auf dem Zielserver.
Der Fehler:
Scheint eine EngineException zu sein.
Zwar habe ich alle möglichen Fehlermöglichkeitenabgefangen, aber es wird nur -256 angezeigt.
Er läuft also ins "else" rein, die FehlerID ist 256.
Leider finde ich so gar nichts im Internet dazu.
Fange ich die Exception allgemein ab, kommt die Meldung:
Fehlermeldung:
Fehler beim Öffnen der Verbindung. temp_dad71e64-5e79-4011-b37c-51401aa07196 2940_1756_{1EDBA7EA-D13F-4269-BB76-0320102BCA57}.rptSystem.Runtime.InteropServices.COMException (0x800002F4): Fehler beim Öffnen der Verbindung. Fehler beim Öffnen der Verbindung. temp_dad71e64-5e79-4011-b37c-51401aa07196 2940_1756_{1EDBA7EA-D13F-4269-BB76-0320102BCA57}.rpt at CrystalDecisions.ReportAppServer.Controllers.ReportSourceClass.Export(ExportOptions pExportOptions, RequestContext pRequestContext) at CrystalDecisions.ReportSource.EromReportSourceBase.ExportToStream(ExportRequestContext reqContext)
Quellcode für das Erzeugen:
public bool CreateCrystalPDF(ref string err, string pdf_name)
{
C_PumpTS ts = new C_PumpTS();
ts.SetDatabaseLogon("User", "Password");
ts.DataSourceConnections[0].IntegratedSecurity = false;
// CrystalReportViewer1.ReportSource = ts;
ts.SetParameterValue("Prüfnummer", GlobalVar.PruefNummer);
ExportOptions CrExportOptions = new ExportOptions();
DiskFileDestinationOptions CrDiskFileDestinationOptions = new DiskFileDestinationOptions();
PdfRtfWordFormatOptions CrFormatTypeOptions = new PdfRtfWordFormatOptions();
//CrDiskFileDestinationOptions.DiskFileName = CrystalReportViewer1.ReportSourceClassFactoryName;
CrFormatTypeOptions.FirstPageNumber = 1; // Start Page in the Report
CrFormatTypeOptions.LastPageNumber = 2; // End Page in the Report
CrFormatTypeOptions.UsePageRange = true;
CrDiskFileDestinationOptions.DiskFileName = pdf_name;
CrExportOptions = ts.ExportOptions;
CrExportOptions.ExportDestinationType = ExportDestinationType.DiskFile;
CrExportOptions.ExportFormatType = ExportFormatType.PortableDocFormat;
CrExportOptions.ExportDestinationOptions = CrDiskFileDestinationOptions;
CrExportOptions.ExportFormatOptions = CrFormatTypeOptions;
try
{
ts.Export();
return true;
}
catch(DataSourceException dsex)
{
err = "Eins:" + dsex.Message;
if (dsex.InnerException != null)
err += dsex.InnerException;
return false;
}
catch(EngineException enex)
{
if (enex.ErrorID == EngineExceptionErrorID.DataSourceError)
{
err = "An error has occurred while connecting to the database. ErrorCode: " + enex.ErrorID;
}
else if (enex.ErrorID == EngineExceptionErrorID.ExportingFailed)
{
err = "ExportingFailed " + enex.ErrorID;
}
else if (enex.ErrorID == EngineExceptionErrorID.LogOnFailed)
{
err = "Incorrect Logon Parameters. Check your user name and password. " + enex.ErrorID;
}
else if (enex.ErrorID == EngineExceptionErrorID.IndexOutOfBound)
err = "Indexoutofbound" + enex.ErrorID;
else if (enex.ErrorID == EngineExceptionErrorID.InternalError)
err = "Internal Error" + enex.ErrorID;
else if (enex.ErrorID == EngineExceptionErrorID.InvalidArgument)
err = "InvalidArgument" + enex.ErrorID;
else if (enex.ErrorID == EngineExceptionErrorID.InvalidExportOptions)
err = "InvalidExportOptions" + enex.ErrorID;
else if (enex.ErrorID == EngineExceptionErrorID.InvalidFormula)
err = "InvalidFormula" + enex.ErrorID;
else if (enex.ErrorID == EngineExceptionErrorID.InvalidParameterField)
err = "InvalidParameterField" + enex.ErrorID;
else if (enex.ErrorID == EngineExceptionErrorID.InvalidParameterValue)
err = "InvalidParameterValue" + enex.ErrorID;
else if (enex.ErrorID == EngineExceptionErrorID.InvalidPrintOptions)
err = "InvalidPrintOptions" + enex.ErrorID;
else if (enex.ErrorID == EngineExceptionErrorID.LoadingReportFailed)
err = "LoadingReportFailed" + enex.ErrorID;
else if (enex.ErrorID == EngineExceptionErrorID.LogOnFailed)
err = "LogOnFailed" + enex.ErrorID;
else if (enex.ErrorID == EngineExceptionErrorID.MissingParameterFieldCurrentValue)
err = "MissingParameterFieldCurrentValue" + enex.ErrorID;
else if (enex.ErrorID == EngineExceptionErrorID.OpenSubreportFailed)
err = "OpenSubreportFailed" + enex.ErrorID;
else if (enex.ErrorID == EngineExceptionErrorID.OutOfLicense)
err = "OutOfLicense" + enex.ErrorID;
else if (enex.ErrorID == EngineExceptionErrorID.PageFormattingFailed)
err = "PageFormattingFailed" + enex.ErrorID;
else if (enex.ErrorID == EngineExceptionErrorID.PrintingFailed)
err = "PrintingFailed" + enex.ErrorID;
else if (enex.ErrorID == EngineExceptionErrorID.SavingReportFailed)
err = "SavingReportFailed" + enex.ErrorID;
else err = enex.ErrorID.ToString();
return false;
}
catch (Exception ex)
{
err = "else: "+ex.Message;
if (ex.InnerException != null)
err += ex.InnerException;
return false;
}
return true;
}
In der Entwicklungsumgebung habe ich Crystal für VisualStudio installiert und den Report aus dem Werkzeugkasten "reingezogen".
Any suggestions?
Ich vermute deine Anwendung hat Zugriffseinschränkungen.
Versuche folgendes: Im IIS ApplicationPool, Erweiterte Einstellungen setze die Identität auf LocalSystem.
2. im Ordner inetpub/wwroot,[deinProjekt], klicke mit rechter Maustaste auf den Ordner, Eigenschaften, Sicherheit, Bearbeiten, Hinzufügen und schreib da Jeder rein.
Anschließend dem Ordner Vollzugriff geben.
Seite neustarten und nochmal probieren.
Ein weiterer Punkt könnte sein, dass die rpt Dateien nicht geladen werden können. Ist der Pfad in den rpt Dateien korrekt?
IIRC verwendet Crystal Reports viel Interop und das war noch nie eine gute Idee im IIS.
I.d.R. fährt man hier mit einem Windows Service, der die Reports generiert besser, als wenn man direkt in einem IIS Prozess mit Crystal Report arbeitet.
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
Hallo und vielen Dank, hat leider alles nichts gebracht, es kommt immer noch Fehler -256 .
Im Internet ist nichts darüber zu lesen.
Crystal Reports ist auch schon so gut wie gestorben. Wahrscheinlich ist es bei die eher so, dass du damit arbeiten musst als willst.
Kannst du die rpt Dateien mit einem rpt Viewer aufmachen? Sind die Pfade zur Datenbank korrekt?
Hallo Gemeinde,
CR soll auch abgeschafft werden, aber in diesem speziellen Fall muss ich daraus eine PDF erzeugen die dann archiviert wird.
Inzwischen funktioniert es auch, habe einige Tests gemacht.
Es lag wohl nur an der Datenbankverbindung, die nicht richtig konfiguriert war.
Warum weiss ich nicht, aber ich habe nun einen Datei DSN angelegt und nehme diesen als Verbindung zur Datenbank.
Also Vorgehensweise mit VS2013:
Dann hier noch der geänderte Quellcode, falls es jemand helfen sollte:
public bool CreateCrystalPDF(ref string err, string pdf_name)
{
CrystalReport1 ts = new CrystalReport1();
ts.SetDatabaseLogon("User", "Passw","Server","Database");
ts.DataSourceConnections[0].IntegratedSecurity = false;
crystalReportViewer1.ReportSource = ts;
ParameterFieldDefinitions parmFields = ts.DataDefinition.ParameterFields;
foreach (ParameterFieldDefinition def in parmFields)
{
if (!def.IsLinked())
{
switch (def.ValueType)
{
case CrystalDecisions.Shared.FieldValueType.StringField:
ts.SetParameterValue(def.Name, "", def.ReportName);
break;
case CrystalDecisions.Shared.FieldValueType.NumberField:
ts.SetParameterValue(def.Name, 33090);
break;
default:
ts.SetParameterValue(def.Name, null, def.ReportName);
break;
}
}
}
ExportOptions CrExportOptions = new ExportOptions();
DiskFileDestinationOptions CrDiskFileDestinationOptions = new DiskFileDestinationOptions();
PdfRtfWordFormatOptions CrFormatTypeOptions = new PdfRtfWordFormatOptions();
//CrDiskFileDestinationOptions.DiskFileName = CrystalReportViewer1.ReportSourceClassFactoryName;
CrFormatTypeOptions.FirstPageNumber = 1; // Start Page in the Report
CrFormatTypeOptions.LastPageNumber = 2; // End Page in the Report
CrFormatTypeOptions.UsePageRange = true;
CrDiskFileDestinationOptions.DiskFileName = pdf_name;
CrExportOptions = ts.ExportOptions;
CrExportOptions.ExportDestinationType = ExportDestinationType.DiskFile;
CrExportOptions.ExportFormatType = ExportFormatType.PortableDocFormat;
CrExportOptions.ExportDestinationOptions = CrDiskFileDestinationOptions;
CrExportOptions.ExportFormatOptions = CrFormatTypeOptions;
try
{
ts.Export();
return true;
}
catch (DataSourceException dsex)
{
err = "Eins:" + dsex.Message;
if (dsex.InnerException != null)
err += dsex.InnerException;
return false;
}
catch (EngineException enex)
{
if (enex.ErrorID == EngineExceptionErrorID.DataSourceError)
{
err = "An error has occurred while connecting to the database. ErrorCode: " + enex.ErrorID;
}
else if (enex.ErrorID == EngineExceptionErrorID.ExportingFailed)
{
err = "ExportingFailed " + enex.ErrorID;
}
else if (enex.ErrorID == EngineExceptionErrorID.LogOnFailed)
{
err = "Incorrect Logon Parameters. Check your user name and password. " + enex.ErrorID;
}
else if (enex.ErrorID == EngineExceptionErrorID.IndexOutOfBound)
err = "Indexoutofbound" + enex.ErrorID;
else if (enex.ErrorID == EngineExceptionErrorID.InternalError)
err = "Internal Error" + enex.ErrorID;
else if (enex.ErrorID == EngineExceptionErrorID.InvalidArgument)
err = "InvalidArgument" + enex.ErrorID;
else if (enex.ErrorID == EngineExceptionErrorID.InvalidExportOptions)
err = "InvalidExportOptions" + enex.ErrorID;
else if (enex.ErrorID == EngineExceptionErrorID.InvalidFormula)
err = "InvalidFormula" + enex.ErrorID;
else if (enex.ErrorID == EngineExceptionErrorID.InvalidParameterField)
err = "InvalidParameterField" + enex.ErrorID;
else if (enex.ErrorID == EngineExceptionErrorID.InvalidParameterValue)
err = "InvalidParameterValue" + enex.ErrorID;
else if (enex.ErrorID == EngineExceptionErrorID.InvalidPrintOptions)
err = "InvalidPrintOptions" + enex.ErrorID;
else if (enex.ErrorID == EngineExceptionErrorID.LoadingReportFailed)
err = "LoadingReportFailed" + enex.ErrorID;
else if (enex.ErrorID == EngineExceptionErrorID.LogOnFailed)
err = "LogOnFailed" + enex.ErrorID;
else if (enex.ErrorID == EngineExceptionErrorID.MissingParameterFieldCurrentValue)
err = "MissingParameterFieldCurrentValue" + enex.ErrorID;
else if (enex.ErrorID == EngineExceptionErrorID.OpenSubreportFailed)
err = "OpenSubreportFailed" + enex.ErrorID;
else if (enex.ErrorID == EngineExceptionErrorID.OutOfLicense)
err = "OutOfLicense" + enex.ErrorID;
else if (enex.ErrorID == EngineExceptionErrorID.PageFormattingFailed)
err = "PageFormattingFailed" + enex.ErrorID;
else if (enex.ErrorID == EngineExceptionErrorID.PrintingFailed)
err = "PrintingFailed" + enex.ErrorID;
else if (enex.ErrorID == EngineExceptionErrorID.SavingReportFailed)
err = "SavingReportFailed" + enex.ErrorID;
else err = enex.ErrorID.ToString();
return false;
}
catch (Exception ex)
{
err = "else: " + ex.Message;
if (ex.InnerException != null)
err += ex.InnerException;
return false;
}
return true;
}