我使用.net4.0在vs2010中创建了一个水晶报告。当我发布网站时,它会抛出错误“由JRC引擎处理的文档无法在C ++堆栈中打开”。我在服务器上发布了这个网站,我正在尝试从客户端访问它,我确实在app_code中记录了.rpt文件,但又一次得到了同样的错误。所以我创建了一个文件夹wwwroot,在该文件夹中我保存了asp_client和网站文件夹,并给了wwwroot的物理路径。一切正常,除了水晶报告。 在.cs文件代码如下:
ReportDocument rptDoc = new ReportDocument();
DataSetForCrystalReport ds = new DataSetForCrystalReport();
DataSetForCrystalReport dsHeader = new DataSetForCrystalReport();
DataTable dt = new DataTable();
DataTable dtHeader = new DataTable();
dt.TableName = "dtBill";
string ReceiptNo = Request.QueryString["ReceiptNo"];
dt = getAllOrders(ReceiptNo).Tables[0];
dtHeader = TblcompanysettingsService.GetOrganizationDetails();
ds.Tables[1].Merge(dt);
ds.Tables[2].Merge(dtHeader);
rptDoc.Load(Server.MapPath("crBill.rpt"));
rptDoc.SetDataSource(ds);
CrystalReportViewer1.ReportSource = rptDoc;
堆栈错误:
[COMException (0x80041811): Unsupported Operation. A document processed by the JRC engine cannot be opened in the C++ stack.]
CrystalDecisions.ReportAppServer.ClientDoc.ReportClientDocumentClass.Open(Object& DocumentPath, Int32 Options) +0
CrystalDecisions.ReportAppServer.ReportClientDocumentWrapper.Open(Object& DocumentPath, Int32 Options) +147
CrystalDecisions.ReportAppServer.ReportClientDocumentWrapper.EnsureDocumentIsOpened() +422
[CrystalReportsException: Load report failed.]
CrystalDecisions.ReportAppServer.ReportClientDocumentWrapper.EnsureDocumentIsOpened() +549
CrystalDecisions.CrystalReports.Engine.ReportDocument.Load(String filename, OpenReportMethod openMethod, Int16 parentJob) +1613
CrystalDecisions.CrystalReports.Engine.ReportDocument.Load(String filename) +189
GenerateBill.Page_Load(Object sender, EventArgs e) in e:\ShareFolder\Movie\wwwroot\Website\GenerateBill.aspx.cs:33
System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e) +25
System.Web.UI.Control.LoadRecursive() +71
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +3064
答案 0 :(得分:46)
检查.rpt文件的路径!错误描述与其真正原因无关。它只是找不到你的.rpt文件!
在我的情况下,路径必须是位于Reports子文件夹中的.rpt文件:
Server.MapPath("~/Reports/InvoiceRegular.rpt");
为我工作。
答案 1 :(得分:25)
这项工作对我来说
更改
一个。将行动建立为“内容”
湾复制到输出目录为“不要复制”
℃。将自定义工具和自定义工具命名空间放空
答案 2 :(得分:5)
我不知道这是否能帮助别人,但我遇到了这个问题,结果却是这么简单的解决方案。我错误输入.rpt文件的文件名...文件名中的两个单词之间有一个空格(我通常不会因为这个原因而这样做)但是当我在我的代码中包含该名称时,我已经离开了这个空间出。纠正了文件名,问题就消失了。
答案 3 :(得分:5)
只做这些步骤
(1)右键单击“.rpt”文件选择“属性”
1.a)将行动建立为“内容”
1.b)复制到输出目录为“始终复制”
(2)检查.rpt文件的路径 Server.MapPath(“您的路径”);
例如:Server.MapPath("~/Reports/MyReport.rpt");
注意:如果带有报表查看器的rpt和aspx页面都位于同一文件夹中,则无需提供完整路径,您只能在Server.MapPath中提供filename.rpt。
答案 4 :(得分:3)
找到解决方案, 我首先使用带有自己的水晶报告的Visual Studio 2005,然后我将其从SAP下载的单独水晶报告升级到VS2010。我从SAP研究并发现:
由于每个版本的Crystal Reports都有自己必须正确部署的特定运行时,因此部署的运行时与项目中引用的Visual Studio .NET的Crystal Reports程序集保持一致至关重要。
所以我卸载了以前的版本并只使用了一个版本而且它有效。 :)感谢ta.speot.is的关注。它从来都不是编码问题。
答案 5 :(得分:1)
我找到了另一种情况,在这种情况下出现了这个相当无益的错误。
如果您在Visual Studio中运行/调试Web应用程序,但仍然在Crystal Reports(2011)中打开报告,您将收到错误。
今天开车送我一个小时了!
答案 6 :(得分:1)
这恰好发生在我身上,经过数小时的头痛后,我发现这是一个文件权限问题。出于某种原因,当从我们的CR dev服务器复制到共享的自定义.rpt目录时,文件的权限全部被抬起,我不得不将多个用户组的权限添加回文件。
答案 7 :(得分:1)
从(C:\ inetpub \ wwwroot)复制并粘贴文件夹(aspnet_client) 到网站文件夹并确保.rpt文件位于同一文件夹
答案 8 :(得分:1)
确保文件路径正确,如提到的@serop。我也注意到报告文件夹不会发布的位置。因此不得不手动发布报告文件夹。
答案 9 :(得分:1)
为我工作: 从本地计算机复制.rpt文件会覆盖主机上的.rpt文件,然后效果很好。
答案 10 :(得分:1)
只需将.rpt文件(crystl报告模板)从本地计算机复制到特定服务器/计算机的文件夹,我敢肯定您可以运行来解决问题CrystalDecisions.Shared.CrystalReportsException:加载报告失败。
对我来说,它运行良好,并且在服务器端没有错误。我的应用程序能够存储pdf文件以根据代码共享路径。
答案 11 :(得分:0)
请检查您的 .rpt 文件是否存在。如果没有请从本地复制到托管文件夹,它将开始工作。
答案 12 :(得分:0)
我在ASP.NET中遇到了同样的问题。请检查您的报告路径。那将是错误的路径。