2

我创建了一个水晶报表(2008 版)来从 sql 2008 服务器中提取数据。大约有 10 个子报表。在水晶设计师中工作得很好。现在我想编写一个小的 c# 程序来通过水晶运行时运行报告,以便部署在不同的系统上。

这里大致是c#代码

static void Main(string[] args) {
    RunReport(Convert.ToInt32(args[0]), args[1].ToString());
}

static void RunReport(int StoerungID, string version) {
    ReportDocument report = new ReportDocument();

    report.Load(System.Configuration.ConfigurationManager.AppSettings["report_basis"]);


    Console.WriteLine("set parameters...");
    report.SetParameterValue("ID", StoerungID);
    report.SetParameterValue("Version", version);

    report.SetDatabaseLogon("user","...");

    string export_filename = System.Configuration.ConfigurationManager.AppSettings["report_export_prefix"] + StoerungID + ".pdf";

    Console.WriteLine("export report to {0}", export_filename);
    report.ExportToDisk(ExportFormatType.PortableDocFormat, export_filename);
    report.Close();
}

在我的开发机器上工作得很好。一旦我将包含水晶运行时文件的 exe 部署到目标机器,我就会收到登录错误。

警告:ORB::BOA_init:主机名查找返回 `localhost' (127.0.0.1/::1) 使用 -OAhost 选项选择其他一些主机名设置参数...导出报告到 ...\Stoerung_6561.pdf 未处理的异常: CrystalDecisions.CrystalReports.Engine.LogOnException:日期 nbankanmeldung fehlgeschlagen。---> System.Runtime.InteropServices.COMException:Datenbankanmeldung fehlgeschlagen。在 ...

它大致说“数据库登录失败”。我认为数据库连接存储在报告中?删除子报告没有帮助。我使用了从 SAP 网站下载的水晶报表运行时。

它是 vs2012 和水晶报告 2008 中的 c# 4.5。

有什么想法吗?怎么了?这是处理这个问题的正确方法吗???非常欢迎任何帮助...

更新:编辑后的代码给出了与以前相同的登录错误:

static void RunReport(int StoerungID, string version) {
    ReportDocument report = new ReportDocument();

    Console.WriteLine("load report {0}", System.Configuration.ConfigurationManager.AppSettings["report_basis"]);
    report.Load(System.Configuration.ConfigurationManager.AppSettings["report_basis"]);

    foreach (CrystalDecisions.Shared.IConnectionInfo ci in report.DataSourceConnections) {
        Console.WriteLine("IConnnectionInfo: Servername: {0}, Databasename: {1}", ci.ServerName, ci.DatabaseName);
        ci.SetConnection("DBSERVER", "INITIALCATALOG",
                         "user","passwd");
    }

    Console.WriteLine("set parameters...");
    report.SetParameterValue("StoerungID", StoerungID);
    report.SetParameterValue("Version", version);

    string export_filename = System.Configuration.ConfigurationManager.AppSettings["report_export_prefix"] + StoerungID + ".pdf";

    Console.WriteLine("export report to {0}", export_filename);
    report.ExportToDisk(ExportFormatType.PortableDocFormat, export_filename);
    report.Close();
}
4

0 回答 0