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