2010-11-28 209 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. 生成操作設置爲「內容」。

它完美地爲我工作..!