摆脱数据库限制,做真正意义上的三层报表

What

报表即用表格,图表等格式来动态显示数据。我们在机房收费的最后的结账部分要用到报表来显示整个结账的情况。

三层的思想是将整个软件分为外观,逻辑,数据三层,各司其职,互相联系但是绝不越位。即U层不会去做D层的事,不会去接触数据库这样的东西,而只是将需求发给B层然后经B层处理后交给D层与数据库连接完成任务,最后将返回值传给U层显示。

三层意义上的报表,当然是隔离数据库的报表,

Why:

为什么要做完全隔离数据库的报表?个人理解这样才符合三层的思想,即在真正的三层合作中负责U层的人是不可能直接访问到数据库的,而应该是接受显示从D层传回来的数据。

如果这样:(如下图)通过数据源配置手动连接了数据库,就违背了三层的原则,即便是最后你是从D层获取的数据,报表的数据源是从D层返回的数据,但是在这一步已经越权。我认为U层是没有权限这样直接访问数据库的

How:

1:创建数据集DateSet

2:为Dateset添加DataTable

3:添加报表,同时为报表添加数据集Dateset,然后在报表中添加表格。

4:U层代码

        Dim CheckBll As New BLL.CheckBLL
        Dim dt As DataTable
        dt = CheckBll.SelectCheck(CheckDate.Value) '获取数据DataTable

        Dim myreport As New ReportDataSource '为报表定义新的数据源
        myreport.Name = "DataSet1"
        myreport.Value = dt
        ReportViewer1.LocalReport.ReportEmbeddedResource = "UI.Report1.rdlc"

        ReportViewer1.LocalReport.DataSources.Add(myreport) '添加数据源

        Me.ReportViewer1.RefreshReport()

5:显示结果

小结:

随着软件进入工程化时代,写软件越来越像装配大型机器,你不可能靠一己之力完成,所以我们需要合作,需要分工。三层,不但便于系统维护,而且也是非常好的系统分工。各层各司其职,互不影响,(弱耦合),共同完成系统。

时间: 2024-10-11 08:20:53

摆脱数据库限制,做真正意义上的三层报表的相关文章

SQL server数据库的在server 2008R2上的安装及基本管理

         SQL server数据库的在server 2008R2上的安装及基本管理(一) 选择SQL的数据库的镜像文件 双击setup.ext 执行安装程序 这里选择安装项,并选择全新安装 安装的环境监测全部通过 因为这里是使用的破解版的镜像,所以会自动生成密钥 再一次检测安装环境 这里选择第一项 这里选择全部的功能 这里选择默认的实例名 这里将系统的内置账户添加到服务中,NT 这里选择混合式身份 验证,并输入sa的密码.并添加本地的管理员 这里添加本地的管理员账户 选择第一项 开始安

实现真正意义上的合并排序

(算法老师布置这道题好长时间了,可是一直没有思路,真的是憋出来的代码啊) 真正意义上的合并排序是按照给的数组来判断的,它分的不是两两一组,在四四一组排序,直到完全排完序,真正意义上的合并排序是指 先在数组上找到已有序的数组,分成几块,在进行合并. 代码如下: #include <stdio.h>#define N 10#define flag1 1#define flag2 2int *FindOrder(int *a,int *b) //找到数组里有序的一段{ int i=0,j=0; wh

【西祠日志】【07】努力努力,找资料,思考,怎么做asp图片上传

[西祠日志][07]努力努力,找资料,思考,怎么做asp图片上传  (2015.07.23周四) 今天忘了带本子,直接写在书上了笔记,晚点还是夹在本子里: 学了这么久的web应用,一直都没时间去做一点,相对复杂点得应用,比如现在要考虑的图片上传,或者是接下来要加强学习的正则表达式.防SQL注入.验证码的实现.图片水印功能等,这的确是应该作为我学习的第二个阶段,做一点相对复杂一点的应用功能,考虑怎样使自己做的网站更加健壮,今天主要是在找asp资料学习图片上传,考虑了下js实现web富文本编辑器,然

数据库查询优化方案(处理上百万级记录如何提高处理查询速度)

1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引.2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如:select id from t where num is null可以在num上设置默认值0,确保表中num列没有null值,然后这样查询:select id from t where num=0 3.应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索

数据建模学习笔记-1-《高质量数据库建模 1-重大意义》

https://edu.hellobi.com/course/54 <高质量数据库建模 1-重大意义> 1.数据模型的概念和意义 DIKW —— 数据(Data) 信息(Information) 知识(Knowledge) 智慧(Wisdom) 如图所示,我理解,通过数据得到信息,通过信息得到知识,通过知识产生智慧.  最终的目的是产生智慧产生决策 2.什么是数据模型? 数据模型是将数据元素以标准化的模式组织起来,用来模拟现实世界的信息框架蓝图 3.数据模型的要求: 1).直观地模拟世界 2)

初次接触真正意义上的Java EE

为什么说是真正意义上的Java EE,因为在此之前,我一直以为Java EE是Java基础之上的高级编程语言,直到今天我才发现一直是自己理解错了.此文是读Java EE编程技术(第2版)的读书笔记,在此说明一下,不涉及侵权问题吧.... Java EE是一个标准中间件体系结构:与Java不同,Java EE不是一种编程语言,而是一种体系结构.Java EE是一个标准中间件体系结构,旨在简化和规范分布式多层企业应用系统的开发和部署. 典型的Java EE结构的应用程序包括四层:客户层.表示逻辑层.

说说“字面意义上的常量&quot;和自然字符串r&quot;str&quot;

在编程语境下,给你一个a,你能看出a是什么? 再给你一个2,你能看出2是什么? a看不出来代表什么,2能看出来它就是一个数字2. 这就是你字面意义上的常量的含义,看到这个东西我就能知道它是什么! ===================华丽的分割线====================== 如果你想要指示某些不需要如转义符那样的特别处理的字符串,那么你需要通过给字符串加上前缀r或R来指定一个自然字符串. 如下: >>> print r'Newlines are these \n' New

北京城六区, 浦西七区为传统意义上的上海中心城区

上海中心城区的核心区域包括:黄浦区(黄浦区加原南市区加原卢湾区).徐汇区.长宁区.杨浦区.虹口区.普陀区.静安区(原静安区加闸北区)以及浦东新区的原南市区.黄浦区和杨浦区的浦东部分(大致为黄浦江至罗山路.龙阳路以内即浦东内环线以内区域).其中浦西七区为传统意义上的上海中心城区. 北京城六区:东城,西城,朝阳,海淀,丰台,石景山,原来是城八区还有宣武和崇文

UCOS中的消息队列并不是真正意义上的队列

UCOS中的消息队列并不是真正意义上的队列,它只是发送了想要发送数据的指针,这个时候,如果发送多个同一个变量的不同数据,那么数据就相当于被覆盖了. 解决办法: 定义一个缓存数组buffer[i]; 更改变量i的数值,就可以实现一个变相的FIFO,因为每次发送的变量的指针是不同的. i++; i %= bufsize; buffer[ ( i + bufsize - 1 ) % bufsize ]; //此处是取的上一个数据,当前数据直接取buffer[i]即可.