问题描述:
近日涉及水晶报表开发,原系统已存在一些水晶报表,放置在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代码中实现并发布、运行。代码如下:
{
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 ;
}