如何将 Crystal 报表连接到多个数据库?
Posted
技术标签:
【中文标题】如何将 Crystal 报表连接到多个数据库?【英文标题】:How do I connect Crystal reports to multiple database? 【发布时间】:2016-01-26 16:13:42 【问题描述】:我有一个带有下拉菜单的网页。在下拉列表中有来自服务器的数据库列表。选择下拉的文档编号会显示出来,我们可以点击生成水晶报表。
我的问题是我在水晶报表中为一个数据库提供了数据源。假设我选择其他数据库。如何连接到多个数据库的报表?
任何意见将不胜感激。
【问题讨论】:
【参考方案1】:您是使用 CR 设计器还是 Visual Studio 来制作报告?因为字段浏览器窗口中有一个连接部分。一般不建议连接多个DB。即使您在报告中使用了例如 2 个或更多存储过程,如果它们没有公用密钥,您的生活也会变得复杂。
【讨论】:
【参考方案2】:以下是我们使用的,它应该适合你。基本上,您必须确保为报表访问的每个表(或命令、或视图等)设置连接。我不知道仅在主报告上设置它的方法。
// create a ReportDocument
using (ReportDocument reportDoc = new ReportDocument())
reportDoc.Load(path); // path to your .rpt file
// get the connection string you want to use
SqlConnectionStringBuilder conInfo = new SqlConnectionStringBuilder("<your connection string>");
Tables crTables = reportDoc.Database.Tables;
int tablecounter = 0;
foreach (CrystalDecisions.CrystalReports.Engine.Table crTable in crTables)
CrystalDecisions.Shared.TableLogOnInfo logonInfo = crTable.LogOnInfo;
logonInfo.ConnectionInfo = new ConnectionInfo()
DatabaseName = conInfo.InitialCatalog,
ServerName = conInfo.DataSource
;
if (conInfo.IntegratedSecurity)
logonInfo.ConnectionInfo.IntegratedSecurity = true;
else
logonInfo.ConnectionInfo.UserID = conInfo.UserID;
logonInfo.ConnectionInfo.Password = conInfo.Password;
crTable.ApplyLogOnInfo(logonInfo);
【讨论】:
好的,我会试试这个。在连接字符串中,我将只连接一个数据库? 正确。您应该根据下拉列表中的选择填写正确数据库的连接字符串。每当它发生变化并且您想创建报告时,您都必须再次执行此操作。 我将把表格或视图放在哪里?以上是关于如何将 Crystal 报表连接到多个数据库?的主要内容,如果未能解决你的问题,请参考以下文章