3

助けが必要です。

実はこの問題を読んで、解決したと思ったのですが、気になり続けています。

これは、開発環境と本番環境でのさまざまなログインに関するものです。

これは解決策になるはずでした(EFおよびSQL Server):

SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder((model.Connection as EntityConnection).StoreConnection.ConnectionString);

ConnectionInfo ci = new ConnectionInfo();

ci.ServerName = builder.DataSource;
ci.DatabaseName = builder.InitialCatalog;
ci.UserID = builder.UserID;
ci.Password = builder.Password;

report.SetDatabaseLogon(ci.UserID, ci.Password, builder.DataSource, ci.DatabaseName);

foreach (CrystalDecisions.CrystalReports.Engine.Table tbl in report.Database.Tables)
{
    TableLogOnInfo logon = tbl.LogOnInfo;
    logon.ConnectionInfo = ci;
    tbl.ApplyLogOnInfo(logon);
}

エンティティ接続からログイン情報を抽出し、それをレポート内のすべてのテーブルに適用します。それでうまくいくはずです。念のためにSetDatabaseLogon()を追加しましたが、必須ではありません。

これで、本番環境でレポートを実行すると、レポートがデータベースログイン画面にポップアップ表示され、正しいサーバー名(本番サーバー)、データベースの横に何も表示されない(これが私の懸念事項です)、適切なユーザー名、パスワードなしで、ログイン情報の入力を求められます。

入力しましたが、CRに「ログインに失敗しました。もう一度やり直してください」と表示されます。私はWTFを意味します。まったく同じクレデンシャルを使用して、ManagementStudioでデータベースに接続します。

ところで、私はWPFビューアを使用しています。

私は本当にここで立ち往生していて、デバッグを行っており、接続情報はすべての正しいデータを取得しているので、誰が原因であるかを報告する必要がありますが、どうすればよいですか?

どんな助けでもいただければ幸いです。誰かが私の前で同じ問題に遭遇したことを願っています。

よろしく

4

3 に答える 3

1

同じ仕事をする私のブログ投稿のコードを見ると、いくつかの違いがわかります。

  • それ自体に設定tbl.Locationします (これは内部で何かを再初期化している可能性があります - それなしでは機能しませんでした)。
  • サブレポートを処理するために再呼び出しできるメソッドにコードを配置します。
  • 私のバージョンは呼び出す必要はありませんreport.SetDatabaseLogon

それ以外は基本的に同じです。

コード:

void SetConnection(ReportDocument rd, crConnectionInfo ci)
{

    foreach (CrystalDecisions.CrystalReports.Engine.Table tbl in rd.Database.Tables)
    {
        TableLogOnInfo logon = tbl.LogOnInfo;
        logon.ConnectionInfo = ci;
        tbl.ApplyLogOnInfo(logon);
        tbl.Location = tbl.Location;
    }
    if (!rd.IsSubReport) {
        foreach {ReportDocument sd in rd.SubReports) {
            SetConnection(sd,ci)
        }
    }
}

(注:これは手作業でコーディングしただけなので、使用する前に確認してください)。

これは、Crystal Reports の VS2008 バージョンで機能します (名前は忘れてください)。

編集:もう1つ、接続の初期化で、いくつかの追加のプロパティが設定されています:

ci.Type = ConnectionInfoType.SQL;
ci.IntegratedSecurity = false;
于 2012-08-06T08:48:41.653 に答える
0

それはまったくばかげた問題で、たまたま解決しました。私のデスクトップ コンピューターへの Crystal Reports のインストールは、問題があったか何かだったので、データベース エキスパートで何かを編集するたびに (テーブルを追加するなど)、レポートが台無しになりました。ラップトップで「データベースの場所を設定」オプションを使用するだけで、レポートが問題なく実行されるようになりました。

于 2012-08-06T19:05:44.527 に答える