1

私はWindowsアプリケーションを開発しており、そこでCrystal Reportを使用しています(Crystalレポートは初めてです)私が直面している問題は、最初の読み込み時にレポートをテストすると正常に動作しますが、レポートを更新しようとするとデータベース ログイン ウィンドウ、このウィンドウを防ぐ方法はありますか? コードを使用してレポートの接続文字列を設定する方法

注: 1-試してみました

private void crystalReportViewer1_ReportRefresh(object source, CrystalDecisions.Windows.Forms.ViewerEventArgs e)
    {
        Myreport.SetDatabaseLogon("username", "password", "server", "dbname", false);
    }

それでもデータベースのログイン ウィンドウが表示されます。

2-Crystal Report のドラッグ アンド ドロップを使用してレポートを作成しています。

3-これは Windows アプリケーションであり、SQL Server 2008 データベース C# はプログラミング言語です。

アプリケーション内の 4 サーバーは、同じ PC 内にある場合とそうでない場合があります。

4

7 に答える 7

2

同様の問題がありました。SetDatabaseLogon 関数が機能しなかったため、レポート内の各テーブルに接続の詳細を手動で割り当てる必要がありました。この機能は SQL Server 向けのものだと思っていましたが (私は Sybase ASE を使用しています)、あなたも私と同じ問題を抱えているかもしれません。

ConnectionInfo connInfo = new ConnectionInfo();
connInfo.ServerName = "Driver={Adaptive Server Enterprise};Server=x.x.x.x;Port=x;";
connInfo.DatabaseName = "dbname";
connInfo.UserID = "username";
connInfo.Password = "password";

TableLogOnInfo tableLogOnInfo = new TableLogOnInfo();
tableLogOnInfo.ConnectionInfo = connInfo;

foreach(Table table in reportDoc.Database.Tables)
{
  table.ApplyLogOnInfo(tableLogOnInfo);
  table.LogOnInfo.ConnectionInfo.ServerName = connInfo.ServerName;
  table.LogOnInfo.ConnectionInfo.DatabaseName = connInfo.DatabaseName;
  table.LogOnInfo.ConnectionInfo.UserID = connInfo.UserID;
  table.LogOnInfo.ConnectionInfo.Password = connInfo.Password;

  // Apply the schema name to the table's location
  table.Location = "dbo." + table.Location;
}

明らかに connInfo.ServerName は異なりますが、この同じ問題で立ち往生している他の人に使用したパターンを ASE に含めました。

お役に立てれば。

于 2013-07-23T00:46:57.373 に答える
1
private void button1_Click(object sender, EventArgs e)
    {
        DataTable dt = new DataTable();
        dt = selectallrecord();
        CrystalReport1 cr1 = new CrystalReport1();
        cr1.SetDataSource(dt);
        crystalReportViewer1.ReportSource = cr1;


    }



    public DataTable selectallrecord()
    {
        Connection c = new Connection();
        //c.main();

        if (c.cn.State == ConnectionState.Open)
        {
            c.cn.Close();
            c.cn.Open();
        }

        DataSet DS = new DataSet();
        string USER = "";
        USER = "SELECT * FROM StudentInfo";
        SqlDataAdapter DA = new SqlDataAdapter(USER, c.cn);
        DA.Fill(DS);
        DataTable DT = DS.Tables[0];
        return DT;

    }
于 2013-07-23T03:34:07.840 に答える
0

接続を閉じているように聞こえますが、更新しても接続が再開されません...確認するために完全なコードを投稿できますか?

于 2013-07-23T00:16:50.340 に答える
0

以下のように SetDatabaseLogon メソッドにデータベース資格情報を与えるだけです Report.SetDatabaseLogon("", "XXX") dbへのアクセス

SQL サーバーの Report.SetDatabaseLogon("sa", "XXXXX","ServerName", "DatabaseName")。

ただし、行ステップ Report.SetDataSource(Dt) の後に与えます

于 2015-03-25T18:26:37.383 に答える
0

「フィールド エクスプローラー」のすべての「データベース フィールド」がレポートで使用されていることを確認します レポートで使用されないすべてのテーブルを DataSet から削除します フィールド エクスプローラー >> データベース フィールド、右クリック >> データベース エキスパート >> 選択済みテーブル

注: このポップアップは、データテーブルが空の場合に表示されます

于 2019-05-01T07:02:58.393 に答える