有人知道为什么会出现以下错误吗?
CrystalDecisions.CrystalReports.Engine.LoadSaveReportException: Load report failed
有人知道为什么会出现以下错误吗?
CrystalDecisions.CrystalReports.Engine.LoadSaveReportException: Load report failed
根据您对 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
Reckface 的回答很清楚,但要补充一些东西。
我设法让它使用这个:
protected void Page_Unload(object sender, EventArgs e)
{
if (reportDocument != null)
{
reportDocument.Close();
reportDocument.Dispose();
crystalReportViewer1.Dispose();
}
}
这样做可能会导致工具栏上的按钮出现问题,因为文档已被处置,它们无法再找到文档路径。在这种情况下,文档需要在回发期间再次加载路径:source
你甚至费心去谷歌吗?这是一个常见的例外;有数百个关于它的帖子散落在中间管周围。
Crystal .NET 运行时有著名的神秘错误消息。这只是意味着无法加载 .rpt 文件(或嵌入式报告)。有几个可能的根本原因:错误的文件名或路径、安全违规、您没有正确处理旧报告以及 windows/temp 被占用等。
做一些研究。如果您仍然卡住,请返回并详细说明问题(您的任何报告是否有效,这是一个网络应用程序吗?您正在使用什么代码等)