0

ここでは、次のコードを使用して、Crystal Report の読み込み中に単一データベースのログイン詳細を入力しています。

rpt.Load(reportPath);
ConnectionInfo connectionInfo = new ConnectionInfo();
connectionInfo.DatabaseName = "Northwind";
connectionInfo.UserID = "user";
connectionInfo.Password="user123";
SetDBLogonForReport(connectionInfo,rpt);
CrystalReportViewer1.ReportSource = rpt;

 private void SetDBLogonForReport(ConnectionInfo connectionInfo, ReportDocument reportDocument)
{
    Tables tables = reportDocument.Database.Tables;
    foreach (CrystalDecisions.CrystalReports.Engine.Table table in tables)
    {
        TableLogOnInfo tableLogonInfo = table.LogOnInfo;
        tableLogonInfo.ConnectionInfo = connectionInfo;
        table.ApplyLogOnInfo(tableLogonInfo);
    }
}

しかし、このコードに2つのデータベースの名前とそのログインの詳細を入力して、Crystal Reportをロードするにはどうすればよいですか...

4

2 に答える 2

0

SetDBLogonForReportチェックインIf (reportDocument.Database.Tables.Item(i).Name == "TableName")

適用する

tableLogonInfo.ConnectionInfo.ServerName = "AltetrnativeName"
tableLogonInfo.ConnectionInfo.DatabaseName= "AltetrnativeDBName"
tableLogonInfo.ConnectionInfo.ReportUser= "AltetrnativeUser"
tableLogonInfo.ConnectionInfo.Password= "AltetrnativePsw"

そうでない場合は、渡した connectionInfo を使用します。これは説明のためのもので、AlternativeConnectionInfo をパラメーターとして渡すこともできます。

このようにして、テーブルごとに必要な数の BD をレポートに接続できます。

不明な場合は教えてください。詳しく教えていただけると嬉しいです。

于 2012-06-12T14:38:59.013 に答える
0

あなたの投稿から、いくつかのサンプルコードを追加しました

rpt.Load(reportPath);
ConnectionInfo connectionInfo = new ConnectionInfo();
connectionInfo.DatabaseName = "Northwind";
connectionInfo.UserID = "user";
connectionInfo.Password="user123";

ConnectionInfo altConnectionInfo = new ConnectionInfo(); 
altConnectionInfo.DatabaseName = "altDataBase";
altConnectionInfo.UserID = "atlUser";
altConnectionInfo.Password="123user123";

SetDBLogonForReport(connectionInfo, altConnectionInfo, rpt);
CrystalReportViewer1.ReportSource = rpt;

 private void SetDBLogonForReport(ConnectionInfo connectionInfo, ConnectionInfo altConnectionInfo ReportDocument reportDocument)
{
    Tables tables = reportDocument.Database.Tables;
    foreach (CrystalDecisions.CrystalReports.Engine.Table table in tables)
    {
        TableLogOnInfo tableLogonInfo = table.LogOnInfo;
        //you can add as much tables as you want but associated with the same connectionInfo
        if (table.Name == "SomeTable") { tableLogonInfo.ConnectionInfo = altConnectionInfo; }
        //if you have multiple connections, you could even use switch structure depending on the table name.
        else { tableLogonInfo.ConnectionInfo = connectionInfo; }
        //unfortunately, this uses table name property, so you must specify any table name depending on the connection you want to associate with.  

        table.ApplyLogOnInfo(tableLogonInfo);
    }
}

Crystal Report を使用するには、SetDBLogonForReport を使用して各テーブルに connectionInfo を追加できます。これがCRの仕組みです。別の方法を見つけることができませんでした (ハードコードされたテーブル名の使用は好きではありません)。

お役に立てれば!

于 2012-06-14T12:47:25.463 に答える