c# - 使用 Crystal Reports for .net 时出错

标签 c# .net crystal-reports console-application

我编写了一个程序,可以从 Crystal Report 生成 PDF,然后通过电子邮件将这些 PDF 发送给某人。该程序在我的开发机器上运行良好,但是当我将 bin\Release 目录复制到 Windows 2000 Server(我想运行它的机器)时,它开始运行,然后生成此错误和堆栈跟踪:

The type initializer for 'CrystalDecisions.CrystalReports.Engine.ReportDocument' threw an exception.
   at CrystalDecisions.CrystalReports.Engine.ReportDocument..ctor()
   at DailyJobCostSummaryEmail.Program.crptToPDF(String reportFile, String jobNum, String outputLocation) in M:\Projects\DailyJobCostSummaryEmail\DailyJobCostSummaryEmail\Program.cs:line 79
   at DailyJobCostSummaryEmail.Program.Main(String[] args) in M:\Projects\DailyJobCostSummaryEmail\DailyJobCostSummaryEmail\Program.cs:line 46

除了从 VISUAL STUDIO 运行时,到处都会出现错误。

.Net 2.0 安装在该机器上,我已经安装了 CRRedist2005_x86.msi 但没有任何效果。我什至收到“向 Microsoft 发送错误报告”对话框,即使我正在使用 try/catch 将异常打印到文件中。即使执行了 catch block ,我的程序也不会正常关闭。

static void Main(string[] args)
{
    try
    {
        String dir = @"JobCostReports";
        DataTable jobs = new DataTable();

        using (SqlConnection conn = new SqlConnection(connString))
        {
            String sql = "JC_GetJobsClosedYesterday";
            SqlDataAdapter da = new SqlDataAdapter(sql, conn);
            da.Fill(jobs);
        }

        List<String> files = new List<String>();

        foreach (DataRow row in jobs.Rows)
        {
           files.Add(crptToPDF(@"JobCost.rpt", row["JobNumber"].ToString().TrimEnd(), dir));
        }

        Utilities.sendEmail("[toEmail]",
                            "[FromEmail]",
                            "Job Cost Summaries for Yesterday",
                            "Attached are Job cost summaries for the " + files.Count + " jobs closed yesterday.",
                            files.ToArray());

        Console.WriteLine("Email sent.");
    }
    catch (Exception e)
    {
        using (StreamWriter writer = new StreamWriter("errors.log", true))
        {
            writer.AutoFlush = true;
            Console.WriteLine();
            writer.WriteLine(e.Message);
            writer.WriteLine(e.StackTrace);
        }

        Console.WriteLine(e.Message);
        Console.WriteLine(e.StackTrace);
        Console.Read();
    }
    finally { }
}

public static String crptToPDF(String reportFile, String jobNum, String outputLocation)
{
    using (ReportDocument rpt = new ReportDocument())
    {
        rpt.Load(reportFile);
        rpt.SetParameterValue("@vJobNumber", jobNum);
        String output = outputLocation + @"\" + jobNum + "_JobCostSummary.pdf";
        rpt.ExportToDisk(CrystalDecisions.Shared.ExportFormatType.PortableDocFormat, output);
        return output;
    }
}

我没有包括所有正确的引用和使用语句吗?我尝试了很多组合,但没有效果。

最佳答案

这也可能是一个问题,因为 visual studio 附带的 CR 程序集与完整产品的版本不同。

如果您在使用从业务对象下载的运行时时遇到问题,请尝试此处的运行时:

https://wiki.sdn.sap.com/wiki/pages/viewpage.action?pageId=56787567

关于c# - 使用 Crystal Reports for .net 时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5342803/

相关文章:

c# - 使用自定义类作为key时"the given key was not present in the dictionary"错误

c# - 是否有可直接在应用程序窗口上执行 OCR 的免费 .NET OCR 库?

.net - 使用外部程序集 : The located assembly's manifest definition does not match the assembly reference

php - 通过 PHP 挂起生成 Crystal Report

c# - Crystalreportviewer 不渲染(asp.net mvc4 razor 语法)

mysql - 如何在ubuntu Linux中运行 Crystal 报表

c# - Win RT SQLite 事务性插入

c# - 当远程 SQL Server 数据库的 scaffold-DbContext 时,构建失败

c# - 在步骤 C# 中将用户输入添加到数组?

c# - 当async block并发数大于1时,抛出异常怎么办?