在IIS中使用Crystal Reports部署应用程序

时间:2018-08-28 10:33:47

标签: c# iis crystal-reports

我正在尝试部署使用Crystal Reports的应用程序。我想说的是,该应用程序在使用IIS Express的过程中可以在本地主机上使用,并且在分阶段使用IIS时也可以使用。这是我可以想到的主要区别,但只是要确保我想写出已完成的整个过程。

  1. 在Visual Studio中生成报告
  2. 在本地主机上创建ODBC连接
  3. 在本地主机上运行报告-有效
  4. 发布MVC应用
  5. 在服务器上添加具有相同名称的ODBC连接
  6. 复制报告以在IIS服务器上正确定位
  7. 运行应用程序和报告应用程序的工作报告不存在。

我得到的日志是:

  

FATAL 2018-08-28 03:22:30,923 37280ms日志服务GenerateReport-StringFormat期间发生异常:索引(从零开始)必须大于或等于零且小于参数列表的大小。在2018年8月28日3:22:30生成报告,例外: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(ExportOptions pExportOptions,RequestContext pRequestContext)      在CrystalDecisions.ReportSource.EromReportSourceBase.ExportToStream(ExportRequestContext reqContext)处      ---内部异常堆栈跟踪的结尾---      在CrystalDecisions.ReportAppServer.ConvertDotNetToErom.ThrowDotNetException(Exception e)      在CrystalDecisions.ReportSource.EromReportSourceBase.ExportToStream(ExportRequestContext reqContext)处      在CrystalDecisions.CrystalReports.Engine.FormatEngine.ExportToStream(ExportRequestContext reqContext)处      在CrystalDecisions.CrystalReports.Engine.ReportDocument.ExportToStream(ExportOptions选项)      在CrystalDecisions.CrystalReports.Engine.ReportDocument.ExportToStream(ExportFormatType formatType)处      在C:\ Users \ James \ Source \ Repos \ QuickQuote3 \ QuickQuote \ Controllers \ ReportsController.cs:line 84 {}

中的QuickQuote.Controllers.ReportsController.GenerateReport(Int32 reportId,String json)

有人可以告诉我我的问题是什么吗?我在Google上看到了此错误,但我不明白我的问题是什么。

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);

BuildReport方法:

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);
}

1 个答案:

答案 0 :(得分:1)

异常消息为innerText

验证是否在ODBC数据源管理器(针对32位和64位)中正确设置了系统数据源。

您可能会收到Failed to open the connection错误,因为.rpt文件中指定的凭据可能对该数据库无效。解决方案是通过代码提供数据库凭据:

Database logon failed