C# Crystal Reports加载报告文档失败
我在vs 2010 c#上使用crystal reports,并使用CR的rpt文档创建pdf文件 我把这段代码放在windows服务上,我的代码正常工作30-40次,但每次进程内存都会以+5+7的速度增长 上次我得到这样的错误:加载文件失败 我的代码:(我想我应该处理/关闭conn,但如何处理) 我最后调用的函数是创建pdf:C# Crystal Reports加载报告文档失败,c#,visual-studio-2010,crystal-reports,crystal-reports-2010,C#,Visual Studio 2010,Crystal Reports,Crystal Reports 2010,我在vs 2010 c#上使用crystal reports,并使用CR的rpt文档创建pdf文件 我把这段代码放在windows服务上,我的代码正常工作30-40次,但每次进程内存都会以+5+7的速度增长 上次我得到这样的错误:加载文件失败 我的代码:(我想我应该处理/关闭conn,但如何处理) 我最后调用的函数是创建pdf: public MemoryStream asPdf { get { using (TempMe
public MemoryStream asPdf
{
get
{
using (TempMemoryStream = (MemoryStream)reportDocument.ExportToStream(CrystalDecisions.Shared.ExportFormatType.PortableDocFormat))
{
return TempMemoryStream;
}
}
}
谢谢你的建议,请帮帮我
private void LoadReport()
{
doc = new ReportDocument();
doc.Load(Server.MapPath("CrSalesReport.rpt"));
doc.SetDatabaseLogon(AppConfig.ReportServerDSUserName, AppConfig.ReportServerDSPassword, AppConfig.ReportServerDomain, "TexERP", false);
}
请为数据库登录尝试此代码请尝试此代码
ReportDocument crystalReport = new ReportDocument();
crystalReport.Load(Server.MapPath("CrystalReport.rpt"));
crystalReport.SetDatabaseLogon("username", "password", @"server name", "DB name");
CrystalReportViewer1.ReportSource = crystalReport;
希望它能帮助您。我像这个示例一样转换了我的代码,它可以工作
using System;
using System.Collections;
using System.Collections.Generic;
using System.Text;
using CrystalDecisions;
using CrystalDecisions.CrystalReports;
using CrystalDecisions.CrystalReports.Engine;
namespace Test.Utilities
{
public class ReportFactory
{
protected static Queue reportQueue = new Queue();
protected static ReportClass CreateReport(Type reportClass)
{
object report = Activator.CreateInstance(reportClass);
reportQueue.Enqueue(report);
return (ReportClass)report;
}
public static ReportClass GetReport(Type reportClass)
{
//75 is my print job limit.
if (reportQueue.Count > 75) ((ReportClass)reportQueue.Dequeue()).Dispose();
return CreateReport(reportClass);
}
}
}
这是代码中设置数据库登录的部分,而不是加载报告的部分(错误是“加载文件失败!”)。你可能会显示你工作的正确部分。我不使用CrystalReportViewer。它是唯一的dll,它会返回pdf流。如果仍然存在,可能是权限问题。为此,请参考链接“我的代码”在2-3小时内正常工作。但存在内存泄漏问题,因此请删除临时文件,因为rpt文件是在临时文件夹中创建的副本。按Ctrl+r并在运行时键入%temp%。删除打开文件夹中的所有文件
ReportDocument crystalReport = new ReportDocument();
crystalReport.Load(Server.MapPath("CrystalReport.rpt"));
crystalReport.SetDatabaseLogon("username", "password", @"server name", "DB name");
CrystalReportViewer1.ReportSource = crystalReport;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Text;
using CrystalDecisions;
using CrystalDecisions.CrystalReports;
using CrystalDecisions.CrystalReports.Engine;
namespace Test.Utilities
{
public class ReportFactory
{
protected static Queue reportQueue = new Queue();
protected static ReportClass CreateReport(Type reportClass)
{
object report = Activator.CreateInstance(reportClass);
reportQueue.Enqueue(report);
return (ReportClass)report;
}
public static ReportClass GetReport(Type reportClass)
{
//75 is my print job limit.
if (reportQueue.Count > 75) ((ReportClass)reportQueue.Dequeue()).Dispose();
return CreateReport(reportClass);
}
}
}