如何以PULL方式装载另一服务器上的水晶报表
问题描述:
近日涉及水晶报表开发,原系统已存在一些水晶报表,放置在Server A中,这些水晶报表要从Server B中提取数据,现新建一网站,位于服务器Server C上,需要把Server A中的水晶报表在网站Web页面中装载显示出来。结构如图:
开发环境: VS2008, Crystal Report 2008, Windows2003 域环境
解决步骤:
1、 分析Server A中水晶报表数据提取需要的ODBC设置,因为Server A中的水晶报表是从Server B中提取数据,所以在Server A中需要建立ODBC数据源指向Server B中的数据库,此工作已由当初创建水晶报表时完成,此处 我们需要分析它的数据源,并做为我们在Server C中创建ODBC数据源时的参考(二者设置要求一致)。
先在Server A 水晶报表中查看它所使用的数据源
再到Server A ODBC设置中分析此数据源设置
2、 在Server C上的网站IIS中建立虚拟目录,此目录直接 引用 Server A中水晶报表的文件夹位置。
3、 设置Server C中ODBC数据源,此处的设置应与Server A中水晶报表所用到的ODBC对应设置一样。即指向Server C中的数据库数据源。
4、 在ASP.NET代码中实现并发布、运行。代码如下:
protected void btnSD1CTX_Click(object sender, EventArgs e)
{
string repFilePathRemoteParamsCtx2 = System.Web.HttpContext.Current.Server.MapPath("../Crystal/水晶报表Test.rpt");
DateTime dtime = new DateTime();//此处dtime是水晶报表Test所需要传入的参数
try
{
dtime = Convert.ToDateTime(txtBxParam.Text.ToString().Trim());
}
catch (Exception ex)
{
string ke = ex.ToString();
}
this.CrystalReportSource1.ReportDocument.Load(repFilePathRemoteParamsCtx2);
//注意:此处NexusSQL即为我们在上面的ODBC设置中设置的ODBC连接名,
this.CrystalReportSource1.ReportDocument.SetDatabaseLogon("UserID", "PassWord", "NexusSQL", "数据库名");
this.CrystalReportSource1.ReportDocument.SetParameterValue("DateRaised", dtime); //传入参数
this.CrystalReportSource1.DataBind();
this.CrystalReportViewer1.ReportSource = this.CrystalReportSource1;
CrystalReportViewer1.AutoDataBind = false;
this.CrystalReportViewer1.DataBind();
CrystalReportViewer1.BestFitPage = true;
}
{
string repFilePathRemoteParamsCtx2 = System.Web.HttpContext.Current.Server.MapPath("../Crystal/水晶报表Test.rpt");
DateTime dtime = new DateTime();//此处dtime是水晶报表Test所需要传入的参数
try
{
dtime = Convert.ToDateTime(txtBxParam.Text.ToString().Trim());
}
catch (Exception ex)
{
string ke = ex.ToString();
}
this.CrystalReportSource1.ReportDocument.Load(repFilePathRemoteParamsCtx2);
//注意:此处NexusSQL即为我们在上面的ODBC设置中设置的ODBC连接名,
this.CrystalReportSource1.ReportDocument.SetDatabaseLogon("UserID", "PassWord", "NexusSQL", "数据库名");
this.CrystalReportSource1.ReportDocument.SetParameterValue("DateRaised", dtime); //传入参数
this.CrystalReportSource1.DataBind();
this.CrystalReportViewer1.ReportSource = this.CrystalReportSource1;
CrystalReportViewer1.AutoDataBind = false;
this.CrystalReportViewer1.DataBind();
CrystalReportViewer1.BestFitPage = true;
}