簡體   English   中英

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

[英]Deploying an app with Crystal Reports in IIS

我正在嘗試部署一個我使用 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 期間的異常:索引(從零開始)必須大於或等於零且小於參數列表的大小。 生成報告時間: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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM