水晶报表介绍学习【推模型】与【拉模型】
2014-02-19 20:48
169 查看
【推荐阅读】啊泰的博客 http://www.cnblogs.com/babyt/category/164227.html
水晶报表程序控制上有两种模式,也就是传说中的PULL模式和PUSH模式,即是大家通常所说的 拉模式和推模式。
那么两种模式的区别在哪里?我们先从其中定义来看看:
【1】推模型(pull Model)【手动写代码】《推荐》
推模型需要开发人员编写代码以便连接到数据库,执行SQL命令以创建于报表中的字段匹配的记录集或数据集,并且将该对象传递给报表。
该方法使您可以将链接共享置入应用程序中,并在Crystal Reports收到数据之前先将数据筛选出来。水晶报表仅当数据显示来用。
由应用程序从数据库(源)获取数据,然后把数据推送给水晶报表引擎。水晶报表本身不不跟数据库进行交互。 由应用程序从数据库(源)获取数据,然后把数据推送给水晶报表引擎。水晶报表本身不不跟数据库进行交互。
【2】拉模型(push Model)【少些代码】
在拉模型中,驱动程序将连接到数据库并根据需要将数据“拉”进来。使用这种模型时候,与数据库的连接和为了获取数据而执行的SQL命令都同时有Crystal Reports本身处理,不需要开发人员编写代码。如果在运行时候无需编写任何特殊代码,则使用拉模型。
》》》由水晶报表模板(引擎)直接连接数据库(源),从数据库(源)里拉取数据。就是我们在水晶报表里设置好数据库信息,以及相关的表。
当我们在程序中调用水晶报表引擎,挂载模板后,水晶报表引擎会根据模板里的数据库信息,及表信息主动连接数据库, 返回数据给报表模板,模板根据设计样式进行呈现。
对比分析:
使用PUSH模式将会比PULL模式多了不少代码。 而且因为PULL模式是直连数据库,比PUSH模式的先获取数据结果,然后推送给水晶报表少了一个过程。而中间结果集本身就占用系统资源。 所以PULL模式比PUSH执行效率高、代码量少。如果是大数据量的清单类的报表,建议用PULL。
但是既然拉模式简单,方便而快捷,而我在这里为什么要推荐大家用【推模式】呢,原因如下:
(1)可以公用系统数据库连接,减少数据库连接损耗
(2)可自由组合多数据源(如多数据库等),这一点PULL模式也可以实现,但是不如这个方便
(3)灵活多变,因为由于我们是把数据获取后,再PUSH给水晶报表的,那么在这个中间,就有很多数据再加工的可能性。
(4)CS模式或小型系统,建议用PULL模式,大型BS系统,建议用PUSH模式。 当然也可以根据实际情况混用。
**********************************************************************
原则1:无论什么模式,返回尽可能少的数据给报表。
原则2:无论是PULL还是PUSH模式,数据源处理部分只负责把数据传给报表,至于怎么呈现是报表里去做的
水晶报表程序控制上有两种模式,也就是传说中的PULL模式和PUSH模式,即是大家通常所说的 拉模式和推模式。
那么两种模式的区别在哪里?我们先从其中定义来看看:
【1】推模型(pull Model)【手动写代码】《推荐》
推模型需要开发人员编写代码以便连接到数据库,执行SQL命令以创建于报表中的字段匹配的记录集或数据集,并且将该对象传递给报表。
该方法使您可以将链接共享置入应用程序中,并在Crystal Reports收到数据之前先将数据筛选出来。水晶报表仅当数据显示来用。
由应用程序从数据库(源)获取数据,然后把数据推送给水晶报表引擎。水晶报表本身不不跟数据库进行交互。 由应用程序从数据库(源)获取数据,然后把数据推送给水晶报表引擎。水晶报表本身不不跟数据库进行交互。
【2】拉模型(push Model)【少些代码】
在拉模型中,驱动程序将连接到数据库并根据需要将数据“拉”进来。使用这种模型时候,与数据库的连接和为了获取数据而执行的SQL命令都同时有Crystal Reports本身处理,不需要开发人员编写代码。如果在运行时候无需编写任何特殊代码,则使用拉模型。
》》》由水晶报表模板(引擎)直接连接数据库(源),从数据库(源)里拉取数据。就是我们在水晶报表里设置好数据库信息,以及相关的表。
当我们在程序中调用水晶报表引擎,挂载模板后,水晶报表引擎会根据模板里的数据库信息,及表信息主动连接数据库, 返回数据给报表模板,模板根据设计样式进行呈现。
对比分析:
使用PUSH模式将会比PULL模式多了不少代码。 而且因为PULL模式是直连数据库,比PUSH模式的先获取数据结果,然后推送给水晶报表少了一个过程。而中间结果集本身就占用系统资源。 所以PULL模式比PUSH执行效率高、代码量少。如果是大数据量的清单类的报表,建议用PULL。
但是既然拉模式简单,方便而快捷,而我在这里为什么要推荐大家用【推模式】呢,原因如下:
(1)可以公用系统数据库连接,减少数据库连接损耗
(2)可自由组合多数据源(如多数据库等),这一点PULL模式也可以实现,但是不如这个方便
(3)灵活多变,因为由于我们是把数据获取后,再PUSH给水晶报表的,那么在这个中间,就有很多数据再加工的可能性。
(4)CS模式或小型系统,建议用PULL模式,大型BS系统,建议用PUSH模式。 当然也可以根据实际情况混用。
**********************************************************************
原则1:无论什么模式,返回尽可能少的数据给报表。
原则2:无论是PULL还是PUSH模式,数据源处理部分只负责把数据传给报表,至于怎么呈现是报表里去做的
相关文章推荐
- 介绍一些学习水晶报表的网络资源
- 水晶报表基础介绍
- .NET基础学习:经典水晶报表设计三则
- JVM学习笔记(八):类加载器以及双亲委派模型介绍
- 【Spark2.0源码学习】-3.Endpoint模型介绍
- 一起学习水晶报表之推模式【强类型的DataSet实现显示报表数据】(课程7)
- 水晶报表的学习笔记
- 深度学习中的Attention模型介绍及其进展
- 推荐一个.net下学习水晶报表的好程序兼ms sql server的好助手
- 水晶报表小例用于学习
- 一起学习水晶报表之拉模式【如何实现水晶报表显示数据信息】(课程3)
- 报表学习总结(一)——ASP.NET 水晶报表(Crystal Reports)的简单使用
- [ASP.NET学习笔记之十三]ASP.NET中水晶报表使用
- 【Spark2.0源码学习】-3.Endpoint模型介绍
- VS2005水晶报表学习-ReportViewer Web 服务器控件
- 水晶报表学习记录之二(数据库登陆问题)
- ASP.NET C#学习三(水晶报表插件)
- [PHP]CodeIgniter学习手册(三):模型Model的介绍与简单案例
- spark学习-73-源代码:Endpoint模型介绍(5)-Netty通讯小例子
- 一起学习水晶报表之推模式【弱类型的DataSet实现显示报表数据】(课程5)