当我将Crystal Report加载到CrystalReportViewer
时,系统会提示我使用已禁用(固定)服务器名称的数据库登录。
现在,当我在我的开发机器上加载相同的报告时,它工作正常。但是当我在另一台机器上部署C#应用程序时,我总是被提示进行数据库登录。 (其中server-name是我的开发机器上使用的名称及其静态(我无法更改)
我一直想找几个星期的解决方案而且没有运气。
我使用DataTable
作为报告来源:
MyReport.SetDataSource(MyDataTable)
我已经尝试过我搜索过的大部分在线解决方案。
我尝试在运行时传递数据库登录信息
我已经安装了SQL Native Client
我试图传递DataSet
而不是DataTable
一切都没有运气
我也明白,当我加载一个包含1个数据库表的报表时,我不会被提示进行数据库登录(即我的数据库将填充一个表格形成数据库:"Select * From SomeTable"
当我使用内联接查询我被提示登录
有关如何处理此问题的任何想法。
答案 0 :(得分:0)
我终于解决了我正在使用
cr.SetDatabaseLogon(Username, Password, @Server, DBNAME);
我替换了该代码并传递了报告中使用的每个表的登录信息
Ť
ableLogOnInfos crtableLogoninfos = new TableLogOnInfos();
TableLogOnInfo crtableLogoninfo = new TableLogOnInfo();
ConnectionInfo CInfo = new ConnectionInfo();
//GET THE SERVER INFORMATION
DataTable DT = b.GetServerInfo();
CInfo.ServerName = DT.Rows[0][1].ToString();
CInfo.DatabaseName = DT.Rows[0][2].ToString();
CInfo.UserID = DT.Rows[0][3].ToString();
CInfo.Password = DT.Rows[0][4].ToString();
Tables CrTables = cr.Database.Tables;
foreach (CrystalDecisions.CrystalReports.Engine.Table CrTable in CrTables)
{
crtableLogoninfo = CrTable.LogOnInfo;
crtableLogoninfo.ConnectionInfo = CInfo;
CrTable.ApplyLogOnInfo(crtableLogoninfo);
}
frmReportViewer ff = new frmReportViewer();
ff.crViewer.LogOnInfo = crtableLogoninfos;
ff.crViewer.ReportSource = cr;
答案 1 :(得分:0)
首先,将对象CrystalReportViewer的属性“ReportSource”设置为Nothing:
CrystalReportViewer1.ReportSource = Nothing
以避免在设计时默认预览任何报告集。