【06年博文搬家】水晶报表系列--水晶报表在不同客户端上的加载处理

    我们在开发平台上建立的水晶报表,在部署到客户机时,会面临这样的问题:客户机的数据库名称或数据库用户帐户和开发平台上的不同,导致报表无法打开。虽然我们可以提前将水晶报表的数据源改为与客户端环境一致,但这样太过麻烦。如果有上百张报表的话,就算仅有10个客户,也会浪费大量的时间。其实,我们在设计和部署时可以不必关注水晶报表的数据源,而是在程序运行时通过代码来动态设置其数据源,以简化水晶报表的部署过程。

    首先我们需要建立一个窗体,用于加载报表。在窗体上添加crystalReportViewer控件,用于承载报表,在此例中将其命名为crvReporter

然后在需要加载报表的代码段写入如下代码(此例中写在了Form_Load事件中,也就是窗体一打开就开始加载报表):    这样一段代码就实现了将应用程序文件夹中的Reports子文件夹中的报表ReportA加载并显示于Form窗体中的功能。在这里,我们并不关心ReprotA的数据源如何设定,而是通过CrystalDecisions.Shared.TableLogOnInfo对象新建了一个数据源信息,并用其更新了ReportA的数据源。这样即使ReportA设定的数据源与客户端环境不同,也不会有影响了。

ContractedBlock.gif ExpandedBlockStart.gif Code
//新建数据库登陆信息对象
CrystalDecisions.Shared.TableLogOnInfo logOnInfo = new CrystalDecisions.Shared.TableLogOnInfo();

//设置连接参数
logOnInfo.ConnectionInfo.ServerName = "(local)";
logOnInfo.ConnectionInfo.DatabaseName 
= "Bookshop";
logOnInfo.ConnectionInfo.IntegratedSecurity 
= true;

//新建报表对象
CrystalDecisions.CrystalReports.Engine.ReportDocument reporter = new CrystalDecisions.CrystalReports.Engine.ReportDocument();

//定义报表加载路径和名称
string path = Application.StartupPath + "\\Reports\\" + ReportA + ".rpt";
reporter.Load(path);

//定义报表的数据库登陆信息
reporter.Database.Tables[0].ApplyLogOnInfo(logOnInfo);

//将报表绑定到CrystalReportViewer控件上
crvReporter.ReportSource = reporter;

 

    在信息连接参数处,我们用了如下代码,分别指定了服务器名称和数据库名称:    在实际环境中,我们应该将服务器名称和数据库名称存入配置文件中,然后在运行时读取并赋值给连接参数。这样在变更客户端环境时,我们仅需要更改配置文件,就可以保证水晶报表能够得到正确的数据源而不用重新进行编译。

ContractedBlock.gif ExpandedBlockStart.gif Code
logOnInfo.ConnectionInfo.ServerName = "(local)";

logOnInfo.ConnectionInfo.DatabaseName 
= "Bookshop";

 

    在登陆方式中,我们使用了集成身份验证,代码如下:当数据库已经为我们的当前登陆账号赋予了访问权限时,我们就可以使用此种方式通过数据库验证。这样的好处是避免了在配置文件中存储用户密码导致的安全性问题。

ContractedBlock.gif ExpandedBlockStart.gif Code
logOnInfo.ConnectionInfo.IntegratedSecurity = true;

    

    如果不想使用集成身份验证而要使用数据库用户帐号登陆,那么可以使用如下代码:    UserId指定了数据库用户名称,Password指定了用户密码。在实际环境中,也应该存储在配置文件里。

ContractedBlock.gif ExpandedBlockStart.gif Code
//将集成身份验证模式设置为false,此行可以省略

logOnInfo.ConnectionInfo.IntegratedSecurity 
= false;

logOnInfo.ConnectionInfo.UserID 
= "username";

logOnInfo.ConnectionInfo.Password 
= "password";

 

 

    至此我们就实现了水晶报表在不同客户端的简单加载。

转载于:https://www.cnblogs.com/benbenkoala/articles/1432884.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值