如果我取出连接字符串信息,报告在我的机器上运行良好,但它要求任何其他用户提供登录信息,所以我正在尝试添加连接信息。未编译的行是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 server 登录屏幕,无论我输入什么,它都会失败。我认为这是因为没有数据库名称,它不允许我手动输入。
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);
}
}