1

接続文字列情報を取得すると、レポートは自分のマシンから正常に実行されますが、他のユーザーはログオン情報を要求するため、接続情報を追加しようとしています。コンパイルされていない行はcr1.SetDatabaseLogon(connection, cr1);

私は何を間違っていますか?どんな助けでも大歓迎です!

private void launchReport(int pKReport)
{
    using (DataClasses1DataContext db = new DataClasses1DataContext())
    {
        var query = (from s in db.expenseHdrs
                     join d in db.expenseDtls on s.rptNo equals d.rptNo
                     where s.rptNo == pKReport
                     from g in db.employees
                     join r in db.expenseHdrs on g.pk equals r.empPk
                     select new
                     {
                         s.period,
                         s.description,
                         s.department,
                         s.rptNo,
                         s.reimbursement, g.name, 
                         d.expDate,
                         d.expType,
                         d.expDesc
                     });

        CrystalReport1 cr1 = new CrystalReport1();

        ConnectionInfo connection = new ConnectionInfo();
        connection.DatabaseName = "intranet";
        connection.UserID = "sa";
        connection.Password = "*****";
        cr1.SetDatabaseLogon(connection, cr1);

        cr1.SetDataSource(query);
        crystalReportViewer1.ReportSource = cr1;
    }
}

また、クエリの後にコードを以下に変更しようとしましたが、接続文字列の資格情報を持っていなかったときとまったく同じ問題がまだあります。私以外のすべてのユーザーで、同じSQLサーバーのログイン画面が表示され、何を入力しても失敗します。手動で入力できないデータベース名がないためだと思います。

 CrystalReport1 cr1 = new CrystalReport1();
            cr1.FileName = @"C:\Intranet\CrystalReport1.rpt";

            ConnectionInfo connectionInfo = new ConnectionInfo();
            connectionInfo.ServerName = "svr-sql";
            connectionInfo.DatabaseName = "intranet";
            connectionInfo.UserID = "sa";
            connectionInfo.Password = "*****";

            SetDBLogonForReport(connectionInfo, cr1);
            cr1.SetDataSource(query);
            crystalReportViewer1.ReportSource = cr1;
        }
    }

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

ここに画像の説明を入力

4

2 に答える 2

1
CrystalReport1 cr1 = new CrystalReport1();
    cr1.FileName = @"C:\Intranet\CrystalReport1.rpt";

    ConnectionInfo connectionInfo = new ConnectionInfo();
    connectionInfo.ServerName = "svr-sql";
    connectionInfo.DatabaseName = "intranet";
    connectionInfo.UserID = "sa";
    connectionInfo.Password = "*****";


    //add this code 

    connectionInfo.IntegratedSecurity = false;

.........................
于 2012-08-24T05:00:41.947 に答える
0

ストレート SQL データソースを使用することが問題でした。SQLサーバーを機能させるには、OLE DB(ADO)に変更する必要がありました。あぁクリスタルレポ…。

于 2012-08-28T14:50:52.620 に答える