如何使用 C# 为晶体报表动态设置数据库名称
本文关键字:设置 动态 数据库 报表 何使用 | 更新日期: 2023-09-27 18:34:18
我有一个C#窗口应用程序,其中有许多水晶报告。我使用以下代码段调用并显示它们:
rptDDCollection rpt = new rptDDCollection();
rpt.SetDatabaseLogon(Connect.sDatabaseUserName, DLL.Connect.sDatabasePassword, "", Connect.sCurrentDatabase);
rpt.RecordSelectionFormula = "";
frmReports frm = new frmReports();
frm.crViewer1.DisplayGroupTree = false;
frm.crViewer1.ReportSource = rpt;
frm.crViewer1.SelectionFormula = rpt.RecordSelectionFormula;
frm.crViewer1.Show();
frm.Show();
现在,问题是我有 2 个数据库要处理。使用一个数据库可以正常工作。我必须使用相同的报告,但经常需要查看来自其他数据库的数据。数据库引擎是 SQL 服务器。在网络上搜索和堆栈溢出时,我发现了通过代码动态设置数据库名称的建议。在这种情况下,应该怎么做才能实现我想要的?
我通过为报告中的表设置数据库名称来解决此问题。我在上面的实际代码中进行了一次更改。我创建了一个名为 ApplyLogonInfo 的方法,并将报告对象传递给它。在该方法中,我编写了用于动态设置报告表的数据库名称的代码。这是修改后的代码:
rptDDCollection rpt = new rptDDCollection();
rpt.SetDatabaseLogon(Connect.sDatabaseUserName, DLL.Connect.sDatabasePassword, "", Connect.sCurrentDatabase);
ApplyLogOnInfo(rpt);
rpt.RecordSelectionFormula = "";
frmReports frm = new frmReports();
frm.crViewer1.DisplayGroupTree = false;
frm.crViewer1.ReportSource = rpt;
frm.crViewer1.SelectionFormula = rpt.RecordSelectionFormula;
frm.crViewer1.Show();
frm.Show();
下面是新创建的方法:
public static void ApplyLogOnInfo(ReportClass rpt)
{
TableLogOnInfo info = new TableLogOnInfo();
info.ConnectionInfo.DatabaseName = Connect.sCurrentDatabase;
for (int i = 0; i < rpt.Database.Tables.Count; i++)
{
rpt.Database.Tables[i].ApplyLogOnInfo(info);
}
}
sCurrentDatabase 是当前已选择进行查看的数据库的名称。
这使我能够动态设置数据库名称,现在我可以处理 2 个(或一般多个)数据库,并查看我希望看到的任何数据库中的数据。