2

SQL 2008 サーバーからデータを抽出する Crystal レポート (バージョン 2008) を作成しました。約 10 のサブレポートがあります。Crystal Designer では問題なく動作します。今度は、Crystal ランタイムを介してレポートを実行し、別のシステムにデプロイするための小さな 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();
}

私の開発マシンでは問題なく動作します。Crystal ランタイム ファイルを含む exe をターゲット マシンに展開するとすぐに、ログオン エラーが発生します。

警告: ORB::BOA_init: ホスト名ルックアップが `localhost' を返しました (127.0.0.1/::1) -OAhost オプションを使用して、他のホスト名セット パラメータを選択してください... レポートを ...\Stoerung_6561.pdf にエクスポートします 未処理の例外: CrystalDecisions.CrystalReports.Engine.LogOnException: Date nbankanmeldung fehlgeschlagen. ---> System.Runtime.InteropServices.COMException: Datenbankanmeldung fehlgeschlagen. で ...

「データベースへのログオンに失敗しました」と大まかに表示されます。データベース接続がレポートに保存されていると思いましたか? サブレポートを削除しても役に立ちませんでした。SAP Web サイトからダウンロードした Crystal Report ランタイムを使用しました。

vs2012 および Crystal Report 2008 では c# 4.5 です。

何かご意見は?何がうまくいかないのですか?これを処理する正しい方法ですか?どんな助けでも大歓迎です...

更新: 編集されたコードは、以前と同じ Logon-Error を返します:

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