2

有人知道为什么会出现以下错误吗?

CrystalDecisions.CrystalReports.Engine.LoadSaveReportException: Load report failed
4

3 回答 3

2

根据您对 windows\Temp 的评论,这是由于应用程序池的身份无法访问 c:\windows\Temp (并且可能无法访问报告文件夹)引起的。

您可以通过授予具有必要权限的应用程序池凭据,或授予“网络用户”对 c:\windows\temp 文件夹(以及可能对报告文件夹)的读写权限来解决此问题。

之所以需要这个文件夹,是因为 Crystal 运行时会在运行时创建报表的动态副本,并将其放在 %temp% 文件夹中。它是显示在 Web 浏览器中的临时文件夹副本(带有附加到原始文件名的 GUID)。这是设计使然,是确保实时报告安全的有用功能。

在此之后,您必须在加载每个报告后进行适当的清理,因为它们只是留在那里并填满临时文件夹!

就像是:

CrystalReportViewer1.Dispose(); // if using the viewer
CrystalReportViewer1 = null;
report.Close(); // I can't remember if this is part of the reportDocument class
report.Dispose();
report = null;
GC.Collect(); // crazy but true. Monitor the temp folder to see the effect
于 2013-10-23T10:56:10.493 回答
0

Reckface 的回答很清楚,但要补充一些东西。

我设法让它使用这个:

protected void Page_Unload(object sender, EventArgs e)
{
    if (reportDocument != null)
    {
        reportDocument.Close();
        reportDocument.Dispose();
        crystalReportViewer1.Dispose();
    }
}

这样做可能会导致工具栏上的按钮出现问题,因为文档已被处置,它们无法再找到文档路径。在这种情况下,文档需要在回发期间再次加载路径:source

于 2019-04-10T13:40:15.747 回答
-5

你甚至费心去谷歌吗?这是一个常见的例外;有数百个关于它的帖子散落在中间管周围。

Crystal .NET 运行时有著名的神秘错误消息。这只是意味着无法加载 .rpt 文件(或嵌入式报告)。有几个可能的根本原因:错误的文件名或路径、安全违规、您没有正确处理旧报告以及 windows/temp 被占用等。

做一些研究。如果您仍然卡住,请返回并详细说明问题(您的任何报告是否有效,这是一个网络应用程序吗?您正在使用什么代码等)

于 2013-04-05T12:08:46.553 回答