【问题标题】:Crystal Reports load reportDocument failedCrystal Reports 加载报告文档失败
【发布时间】:2013-05-02 12:20:49
【问题描述】:

我在vs 2010 c#上使用水晶报告,我使用CR的rpt文档创建pdf文件。

我把这段代码放在 Windows 服务上,我的代码正常工作了 30 - 40 次,但是每次进度每 +5 +7 内存就会增加。

最后我得到这样的错误:加载文件失败!

我的代码:(我想我处置/关闭 conn 但如何)

     private void ReportLogin(ReportDocument crDoc, string Database, string Server, string UserID, string Password)
    {
        try
        {
            crConnectionInfo = new ConnectionInfo();
            crConnectionInfo.ServerName = Server;
            crConnectionInfo.DatabaseName = Database;
            crConnectionInfo.UserID = UserID;
            crConnectionInfo.Password = Password;

            crDatabase = crDoc.Database;
            crTables = crDatabase.Tables;

            foreach (CrystalDecisions.CrystalReports.Engine.Table crTable in crTables)
            {
                crTableLogonInfo = crTable.LogOnInfo;
                crTableLogonInfo.ConnectionInfo = crConnectionInfo;
                crTable.ApplyLogOnInfo(crTableLogonInfo);
            }
        }
        catch (Exception x)
        {
            throw x;
        }
    }

    private void _CrystalReport(string RptFilePath)
    {

        reportDocument = LoadDoc(RptFilePath);

        RptParamsWithType = new Dictionary<string, string>();

        if (reportDocument.ParameterFields.Count > 0)
        {
            foreach (ParameterField pField in reportDocument.ParameterFields)
            {
                RptParamsWithType.Add(pField.Name,              pField.ParameterValueType.ToString().Replace("Parameter", ""));
            }
        }
    }

加载函数:

    private ReportDocument LoadDoc(string RptFilePath)
    {
        try
        {
            reportDocument = new ReportDocument();
            reportDocument.Load(RptFilePath);

            return reportDocument;

        }
        catch (Exception x)
        {
            throw x;
        }

    }

我上次调用的函数是创建 pdf:

     public MemoryStream asPdf
    {
        get
        {
            using (TempMemoryStream = (MemoryStream)reportDocument.ExportToStream(CrystalDecisions.Shared.ExportFormatType.PortableDocFormat))
            {
                return TempMemoryStream;
            }
        }
    } 

谢谢建议,请帮帮我

【问题讨论】:

  • 这是代码中设置数据库登录的部分,而不是加载报告的部分(并且您的错误是“加载文件失败!”)。你可能会展示你工作的正确部分。

标签: c# visual-studio-2010 crystal-reports crystal-reports-2010


【解决方案1】:

我像这个示例一样转换了我的代码,它可以工作了!

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);
    }
  } 
}

Original Link

【讨论】:

    【解决方案2】:

    试试这个代码

    ReportDocument crystalReport = new ReportDocument();
    crystalReport.Load(Server.MapPath("CrystalReport.rpt"));
    crystalReport.SetDatabaseLogon("username", "password", @"server name", "DB name");
    CrystalReportViewer1.ReportSource = crystalReport;
    

    希望对你有帮助。

    【讨论】:

    • 如果仍然存在,可能是权限问题。请参考该链接link
    • 我的代码在 2-3 小时内可以正常工作。但是有内存泄漏问题
    • 所以删除你的临时文件,因为 rpt 文件是在临时文件夹中创建的副本。
    • 按 Ctrl+r 并在运行中输入 %temp% 。删除打开文件夹中的所有文件
    【解决方案3】:
        private void LoadReport()
        {
            doc = new ReportDocument();
            doc.Load(Server.MapPath("CrSalesReport.rpt"));
            doc.SetDatabaseLogon(AppConfig.ReportServerDSUserName, AppConfig.ReportServerDSPassword, AppConfig.ReportServerDomain, "TexERP", false);
    
        }
    

    试试这个代码进行数据库登录

    【讨论】:

    • 我不使用 CrystalReportViewer。它只有 dll,它会返回我的 pdf 流。
    猜你喜欢
    • 2012-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多