如何将 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 报表连接到多个数据库?的主要内容,如果未能解决你的问题,请参考以下文章

如何将表连接到联合查询的结果

如何将学生和评估表连接到一个视图中?

当带有报表查看器的表单加载时,通过 C# 代码动态更改 Crystal Report 的数据库路径

如何根据之前的记录将 SQL 表连接到自身?

如何将两个事实表连接到一维表

数据仓库如何将具有外键的事实表连接到主键包含两个属性的维度表