Asp.net 更改.NET Crystal Reports中的数据库

Asp.net 更改.NET Crystal Reports中的数据库,asp.net,crystal-reports,Asp.net,Crystal Reports,我有一个问题在这里得到了完美的描述(): 情景: Windows智能客户端应用程序和用于Windows的CrystalReportViewer。 使用ServerFileReports通过集中且断开连接的文件夹位置访问报告 当访问针对DB_DEV设计的报告并试图通过CrystalReportViewer更改其登录信息以指向DB_UAT时,它似乎从未实际使用更改的信息 它总是违反DB_DEV信息 知道如何更改ServerFileReport的数据库连接和登录信息吗 这里是代码: 来自演示者:

我有一个问题在这里得到了完美的描述():

情景:

Windows智能客户端应用程序和用于Windows的CrystalReportViewer。 使用ServerFileReports通过集中且断开连接的文件夹位置访问报告

当访问针对DB_DEV设计的报告并试图通过CrystalReportViewer更改其登录信息以指向DB_UAT时,它似乎从未实际使用更改的信息

它总是违反DB_DEV信息

知道如何更改ServerFileReport的数据库连接和登录信息吗

这里是代码:

来自演示者:



// event that fires when the views run report button is pressed
private void RunReport(object sender, EventArgs e)
{
this.view.LoadReport(Report, ConnectionInfo);
}

protected override object Report
{
get
{
ServerFileReport report = new ServerFileReport();
report.ObjectType = EnumServerFileType.REPORT;
report.ReportPath = @"\Report2.rpt";
report.WebServiceUrl = "http://localhost/CrystalReportsWebServices2005/ServerFileReportService.asmx";
return report;

}
}
private ConnectionInfo ConnectionInfo
{
get
{
ConnectionInfo info = new ConnectionInfo();
info.ServerName = servername;
info.DatabaseName = databasename;
info.UserID = userid;
info.Password = password;
return info;
}
}

ON THE VIEW WITH THE CRYSTAL REPORT VIEWER:

public void LoadReport(object report, ConnectionInfo connectionInfo)
{
viewer.ReportSource = report;
SetDBLogon(connectionInfo);
}

private void SetDBLogon(ConnectionInfo connectionInfo)
{
foreach (TableLogOnInfo logOnInfo in viewer.LogOnInfo)
{
logOnInfo.ConnectionInfo = connectionInfo;
}
}

有人知道如何解决这个问题吗?

我知道这不是您想要的程序化答案,但是:

有一件事对这类事情很有帮助,那就是不要直接创建连接到数据库的报表,而是首先为Crystal reports创建一个“数据字典”(这是在报表设计器中完成的)。然后将所有报告链接到此字典,该字典将字段映射到适当的数据库

通过这种方式,您只有一个地方可以更改所有报表的数据库架构/连接信息


另外,在报表设计器中,将报表设置为不缓存结果(抱歉,我不记得确切的选项)。报告可以包含或不包含其初始结果。

在CrystalReportViewer对象中,您应该设置

AutoDataBind="true"

您不需要浏览报表的所有“databaseTable”对象来重定向相应的连接吗?你会发现我的VB版本的“数据库切换”问题