如何将Crystal报表连接到多个数据库?

时间:2016-01-26 16:13:42

标签: c# sql asp.net sql-server crystal-reports

我有一个有下拉列表的网页。在下拉列表中,有一个来自服务器的数据库列表。在选择下拉文档时,会显示数字,我们可以单击并生成水晶报告。

我的问题是我在水晶报告中为一个数据库提供了数据源。假设我选择了其他数据库。如何连接到多个数据库的报告?

非常感谢任何投入。

2 个答案:

答案 0 :(得分:0)

您是否使用CR设计器或Visual Studio来制作报告?因为在字段资源管理器窗口中有一个连接部分。通常,不建议连接到多个DB。即使您为报告使用了2个或更多存储过程,如果他们没有共用密钥,也会使您的生活变得复杂。

答案 1 :(得分:0)

以下是我们使用的,它应该适合您。基本上,您必须确保对于报表访问的每个表(或命令或视图等),都会设置连接。我不知道只在主报告上设置它的方法。

// 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);
    }
}