asp.net - Crystal 报表方法未找到

标签 asp.net model-view-controller crystal-reports

我做了一个反馈项目。我在 ASP.NET MVC 5 上制作它,它也有 Crystal 报告。报告工作正常,但突然停止工作。我不知道他们发生了什么。但自上周以来,我努力寻找解决方案,但不幸的是找不到合适的解决方案。我下载了不同的运行时间,但一切都是徒劳的。这是错误的底线。

"Method not found: 'CrystalDecisions.ReportAppServer.DataDefModel.PropertyBag CrystalDecisions.ReportAppServer.ReportDefModel.ISCRExportOptions.get_ExportOptionsEx()'" this is the code:

公共(public) CrystalReportFeedback UserFeedbackDateWise(FeedbackReport 为){

        if (Session["CurrentUser"] != null && Convert.ToInt32(Session["User_Id"]) != 0)
        {
            string reportPath = Path.Combine(Server.MapPath("~/Reports"), "UserFeedbackReport.rpt");
            if (ModelState.IsValid)
            {
                be.FromDate = Convert.ToDateTime(TempData["UserFromDate"]);
                be.ToDate = Convert.ToDateTime(TempData["UserToDate"]);
                be.User_Id = Convert.ToInt32(Session["User_Id"]);
            }
            return new CrystalReportFeedback(reportPath, be);
        }
        else
        {
            return null;
            //new CrystalReportFeedback(reportPath, be);
        }
    }

报告初始化:

public CrystalReportFeedback(string reportPath, FeedbackReport be)//, object dataSet)
        {
            //int[] array;
            string strConnect = Convert.ToString(System.Configuration.ConfigurationManager.ConnectionStrings["TSC"]);
            SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder(strConnect);
            string _username = builder.UserID;
            string _pass = builder.Password;
            string _server = builder.DataSource;
            string _database = builder.InitialCatalog;
            ReportDocument reportDocument = new ReportDocument();
            //
            reportDocument.Load(reportPath);
            reportDocument.SetDatabaseLogon(_username, _pass, _server, _database);
            if (be.Region_Id != 0)
            {
                reportDocument.SetParameterValue("@Region_Id", be.Region_Id);
            }
            if (be.User_Id != 0)
            {
                reportDocument.SetParameterValue("@User_Id", be.User_Id);
            }
            reportDocument.SetParameterValue("@FromDate", be.FromDate);
            reportDocument.SetParameterValue("@ToDate", be.ToDate);
            //reportDocument.ExportToDisk(ExportFormatType.PortableDocFormat, "C:\report.pdf");
            _contentBytes = StreamToBytes(reportDocument.ExportToStream(ExportFormatType.PortableDocFormat));
        }

导出方法:

    public override void ExecuteResult(ControllerContext context)
    {

        var response = context.HttpContext.ApplicationInstance.Response;
        response.Clear();
        response.Buffer = false;
        response.ClearContent();
        response.ClearHeaders();
        response.Cache.SetCacheability(HttpCacheability.Public);
        response.ContentType = "application/pdf";

        using (var stream = new MemoryStream(_contentBytes))
        {
            stream.WriteTo(response.OutputStream);
            stream.Flush();
        }
    }

    private static byte[] StreamToBytes(Stream input)
    {
        byte[] buffer = new byte[16 * 1024];
        using (MemoryStream ms = new MemoryStream())
        {
            int read;
            while ((read = input.Read(buffer, 0, buffer.Length)) > 0)
            {
                ms.Write(buffer, 0, read);
            }
            return ms.ToArray();
        }
    }

希望我能尽快得到解决方案。

这是修改后的代码:

[HttpGet]

    public FileResult UserFeedbackDateWise(FeedbackReport be)
    {

        if (Session["CurrentUser"] != null && Convert.ToInt32(Session["User_Id"]) != 0)
        {
            string reportPath = Path.Combine(Server.MapPath("~/Reports"), "UserFeedbackReport.rpt");
            if (ModelState.IsValid)
            {

                be.FromDate = Convert.ToDateTime(TempData["UserFromDate"]);
                be.ToDate = Convert.ToDateTime(TempData["UserToDate"]);
                be.User_Id = Convert.ToInt32(Session["User_Id"]);
            }
            string strConnect = Convert.ToString(System.Configuration.ConfigurationManager.ConnectionStrings["TSC"]);
            SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder(strConnect);
            string _username = builder.UserID;
            string _pass = builder.Password;
            string _server = builder.DataSource;
            string _database = builder.InitialCatalog;
            ReportDocument reportDocument = new ReportDocument();
            //
            reportDocument.Load(reportPath);
            reportDocument.SetDatabaseLogon(_username, _pass, _server, _database);
            if (be.Region_Id != 0)
            {
                reportDocument.SetParameterValue("@Region_Id", be.Region_Id);
            }
            if (be.User_Id != 0)
            {
                reportDocument.SetParameterValue("@User_Id", be.User_Id);
            }
            reportDocument.SetParameterValue("@FromDate", be.FromDate);
            reportDocument.SetParameterValue("@ToDate", be.ToDate);

            Stream stream = reportDocument.ExportToStream(CrystalDecisions.Shared.ExportFormatType.PortableDocFormat);

            //Here i have my stream with my pdf report, i just create a new FileStreamResult and return it to my client like that : 
            FileStreamResult myfile = new FileStreamResult(stream, "application/pdf");
            return myfile;
                //new CrystalReportFeedback(reportPath, be);
        }
        else
        {
            return null;
            //new CrystalReportFeedback(reportPath, be);
        }
    }

最佳答案

这不是编码问题,而是运行时问题。 Crystal 运行时的版本或应用程序的位数。

首先要尝试的一件事是升级您的开发版本并确保您在生产中运行相同的版本。请参阅https://apps.support.sap.com/sap/support/knowledge/public/en/2148492了解更多详情

它说:

将您的应用程序编译为“X86 模式”或“X64 模式” 在部署计算机上安装特定版本的运行时。

即如果应用程序编译为 32 位,则安装 32 位运行时。

关于asp.net - Crystal 报表方法未找到,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41422468/

相关文章:

c# - 浏览器关闭后Session变为空

jquery - "nested"MVC 中的表单

javascript - 使用 typeahead 在 C# 中自动完成不起作用

php - 关于 Php 中 MVC 的简单问题

excel - Crystal 报表导出到Excel单元格合并问题

c# - 如何将一行gridview的客户端id发送到javascript

asp.net - 如何将 ContextKeys 属性用于 AjaxFileUpload 控件?

c# - 如何在 GridMvc 中设置列​​文本颜色

crystal-reports - 混合模式程序集是针对版本X构建的,如果没有其他配置信息,则无法在运行时的版本Y中加载

sql-server-2008 - 如果没有报告记录,则显示 MessageBox