2010-11-28 154 views
16

我试图从我的web应用程序运行使用ASP.NET 4.0和Visual Studio 2010构建的水晶报表。我已经从SAP站点安装了以下内容(http://www.businessobjects.com/jump/xi/crvs2010/us2_default.aspCrystal Reports for Visual Studio 2010错误

1)适用于Visual Studio 2010的SAP Crystal Reports版本 - 标准EXE安装包,可将软件安装到Visual Studio IDE中。

2),用于.NET框架4(64位)

SAP水晶报表运行时引擎我有一个名为Reports.aspx页面,其中我有一个晶体报告观看者控制

<CR:CrystalReportViewer ID="rptViewer" runat="server" AutoDataBind="true" /> 

在该Reports.aspx.cs文件我有以下代码:

protected override void OnPreRender(EventArgs e) 
{ 
    ReportDocument report = new ReportDocument(); 
    var path = Server.MapPath("Reports/Sample.rpt"); 
    report.Load(path); 
    report.SetDatabaseLogon("username", "password", "servername", "databasename"); 
    rptViewer.ReportSource = report; 
} 

在我收到以下错误report.Load(路径)线:

不支持的操作。由JRC引擎处理的文档不能在C++堆栈中打开。

我该如何解决这个问题?

回答

10

确保报告在app_code文件夹中 初始化它的新实例,而不是初始化reportdocument并在其中加载报告。

Sample report = new Sample(); 

这个工作对我来说

13

我也得到了同样的问题我的问题是报告的路径是无效的,可能是你有同样的问题,检查使用Server.Mappath(“报告/ Sample.rpt” )返回有效路径?

+1

感谢您的回答。我刚刚遇到了同样的问题。它并没有跨过我的脑海去检查报告文件是否真的存在! D'哦!报告文件上的属性被设置为复制=不复制,所以自动构建不会输出它们。 – Anthony 2011-09-27 00:05:03

+0

+1如果报告文件不存在,你可以遇到这个问题,因为我做 – 2012-04-05 07:50:19

+0

@Priyan R - - 你似乎有很好的处理。你能帮我这个[链接] http://stackoverflow.com/questions/22671709/asp-crystalreportviewer-will-not-display-report – ArtK 2014-03-26 22:20:10

3

当我将一个网站转换为一个web应用程序时,我遇到了这个问题。该报告将在我的开发机器上正常运行,但不会在服务器上运行。然后我意识到rpt文件是在服务器上缺少

默认情况下,报表文件被视为嵌入式资源,并且在Web应用程序发布时不会被复制。我只是单独更换了它们,重新发布了该网站,并且一切都很顺利。

0

请确保您的报告rpt文件在其原始文件夹中。在我将我的MVC网站发布到IIS后,我首先得到了同样的错误。我没有意识到“Publish”没有将rpt文件放入包中。

2

如果我误将报告文件留在水晶报表设计器中,我也有报告加载失败。

5

注意:下面,术语“WebSite”是指IIS中的实际网站节点,而不是网站中的虚拟目录。

问题根本原因:应用程序无法访问“aspnet_client”文件夹。
这种情况可能有以下几个原因:

  1. 由于SAP CR安装程序似乎安装在... \的Inetpub \ wwwroot文件\文件夹中的文件夹aspnet_client,如果你的网站的物理路径不...\ inetpub \ wwwroot,您的应用程序将无法访问aspnet_client文件夹。
  2. 如果将aspnet_client文件夹从您的网站的物理路径的顶层移动或删除,您的IIS应用程序将无法访问该文件夹。

问题解决方法(对于Windows Server 2008 R2)

  1. 转到IIS管理您的服务器上
  2. 展开该网站上的树视图节点上运行你的应用程序
  3. 看直接在网站节点下的级别,并确保您看到一个“aspnet_client”文件夹。
  4. 如果您确实看到该文件夹​​,那么这个根本原因可能不是问题的原因。
  5. 如果您没有看到该文件夹​​,请搜索服务器的硬盘驱动器并将其复制到网站的物理路径。
  6. 鼠标右键单击网站节点,然后单击从弹出式菜单中的刷新
  7. 现在您应该直接在网站节点下看到aspnet_client文件夹,并且应用程序中的报告应该可以工作。
2

这个错误是一个真正的享受,似乎有许多可能的前奏。幸运的是,我只浪费了一天的时间来处理我的特定变体:

ReportDocument.Load()也会生成本地临时副本。 (这可能只是在来自网络驱动器位置的负载情况下,我没有在本地负载的情况下对此进行测试。)

如果发生负载的用户上下文没有权限在本地创建临时文件,Load将失败,并出现相同的非常无用的错误。


另外,我最后用Process Monitor来诊断这个。这对你也可能有帮助。

5

您需要在.RPT文件修改两个属性:

  1. 生成操作被默认设置为“嵌入的资源”。将其更改为“内容”。
  2. 复制到输出默认设置为“不复制”。将其更改为“复制总是”。

重建,构建部署包和发布。完成!

0
  1. 重新安装“Crystal报表引擎”服务器

  2. 生成操作设置为“内容”。

它完美地为我工作..!

相关问题