[英]Deploying an app with Crystal Reports in IIS
我正在尝试部署一个我使用 Crystal Reports 的应用程序。我想说它可以在本地主机上运行,因为我使用的是 IIS Express,而在登台时我使用的是 IIS。 这是我能想到的主要区别,但只是为了确定我想写出已经完成的整个过程。
我得到的日志是:
FATAL 2018-08-28 03:22:30,923 37280ms 日志服务 GenerateReport - StringFormat 期间的异常:索引(从零开始)必须大于或等于零且小于参数列表的大小。 生成报告时间:8/28/2018 3:22:30 AM,异常:CrystalDecisions.CrystalReports.Engine.InternalException:无法打开连接。 QuoteReport 5092_4216_{0FAD9DBD-DCD7-4158-816D-56895A79B362}.rpt 详细信息:[数据库供应商代码:4060] ---> System.Runtime.InteropServices.COMException:无法打开连接。 QuoteReport 5092_4216_{0FAD9DBD-DCD7-4158-816D-56895A79B362}.rpt 详细信息:[数据库供应商代码:4060 ] 在 CrystalDecisions.ReportAppServer.Controllers.ReportSourceClass.Export(Exports. ExportRequestContext reqContext) --- 内部异常堆栈跟踪结束 --- 在 CrystalDecisions.ReportAppServer.ConvertDotNetToErom.ThrowDotNetException(Exception e) 在 CrystalDecisions.ReportSource.EromReportSourceBase.ExportToStream(ExportRequestContext reqContext) 在 CrystalDecisions.CrystalReports.portEngine.FormatEngine(StreamEngine.Ex) ExportRequestContext reqContext) at CrystalDecisions.CrystalReports.Engine.ReportDocument.ExportToStream(ExportOptions options) at CrystalDecisions.CrystalReports.Engine.ReportDocument.ExportToStream(ExportFormatType formatType) at QuickQuote.Controllers.ReportsController.GenerateReport(Int32) int32 报告Id,字符串\\用户\\James\\Source\\Repos\\QuickQ uote3\\QuickQuote\\Controllers\\ReportsController.cs:line 84{}
有人可以告诉我我的问题是什么吗? 我有谷歌这个错误,我不明白我的问题是什么。
try
{
var stream = _reportBuilder.BuildReport(dataSet, report, filePath, parameters);
stream.Seek(0, SeekOrigin.Begin);
return File(stream, "application/pdf", $"Quote{report.Name}-{DateTime.Now}.pdf");
}
catch (Exception e)
{
_loggingService.FatalFormat($"Generate Reports at: {DateTime.Now}, Exception: {e}");
throw;
}
在reportBuilder.BuildReport
里面是它被破坏的地方。 我确定这是这一行:
var stream = reportDocument.ExportToStream(ExportFormatType.PortableDocFormat);
构建报告方法:
public Stream BuildReport(DataSet dataSet, Report report, string path, string parameters)
{
var reportDocument = new ReportDocument();
reportDocument.Load(path);
reportDocument.SetDataSource(dataSet);
AddParametersToReport(ref reportDocument, report, parameters);
return reportDocument.ExportToStream(ExportFormatType.PortableDocFormat);
}
异常消息是Failed to open the connection
。
验证是否在 ODBC 数据源管理器中正确设置了系统数据源(32 位和 64 位)。
您可能会收到Database logon failed
错误,因为 .rpt 文件中指定的凭据可能对数据库无效。 解决方案是在代码中提供数据库凭据:
public Stream BuildReport(DataSet dataSet, Report report, string path, string parameters)
{
try
{
var reportDocument = new ReportDocument();
reportDocument.Load(path);
reportDocument.SetDataSource(dataSet);
AddParametersToReport(ref reportDocument, report, parameters);
// Set database credentials
reportDocument.SetDatabaseLogon("dbUsername", "dbPassword");
return ReportDocument.ExportToStream(ExportFormatType.PortableDocFormat);
}
catch(Exception ex)
{
_loggingService.FatalFormat($"Exception: {ex}");
throw;
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.