(转)三层相关案例(及常见的错误)

原文地址:http://www.cnblogs.com/zysbk/archive/2012/10/16/2726895.html

 

三层相关案例(及常见的错误)

今天我们再次带领大家学习三层的知识,由于三层这块的内容在工作中用的比较的多.所以,我再把登录验证密码的题目做一遍.题目中没有了验证用户是否存在.

先回顾一下上次我们给大家看的两个图:

一、三层架构图

二、两个案例的流程图

今天我们建三个项目,这个方便我们看清三层。

三、建好界面层

四、建好的三层

SqlHelper是操作数据库的,和数据库有关,在数据访问层。添加一个引用。

我们把配置文件也先放在数据访问层里面。将配置文件中的相关信息改好。

下面我们还是先画下界面层的界面。

五、画好界面层

下面的步骤我们再复习一下:

  1. 根据需求分析Sql语句

selectcount(*)fromT_SeatswhereCC_LoginId=@uidandCC_LoginPassword=@pwd

当登录成功之后,第一在窗体的上方显示欢迎xxx,第二要记住登录的主键Id。

查主键Id和真实姓名。

selectcc_autoId,cc_userNamefromT_SeatswhereCC_LoginId=@uidandCC_LoginPassword=@pwd

2. 数据访问层

想一下执行第一条Sql语句需要调什么方法?

执行第二条Sql语句需要调什么方法?

确定下数据访问层的类。

六、验证登录是否成功方法的代码

七、写好model

八、写好数据访问层的代码

3.确定BLL业务逻辑层

九、创建好类,添加引用,写好MD5

十、写好业务逻辑层

十一、添加两个引用,写好存数据的类,及代码

十二、写好界面层的代码

调试的时候出现错误,大家也来想一想哪儿出现了错误呢?

表明SqlHelper中读取字符串出现错误。

查了之后,还没有读到这,那可能就是配置文件的问题。

刚才我们把配置文件放在了数据访问层,为什么不能放在数据访问层呢?

十三、系统报错,及修改思路

另外,如果不想在界面层做一堆的逻辑判断的话,把我们刚在里面写的逻辑判断,再封装成一个方法。

确定BLL业务逻辑层:根据需求确定需要几个方法,以及每个方法的参数与返回值等。

十四、把登录成功的用户名显示到窗口的左上角

下面我们做下修改密码,修改密码跟用户登录思路差不多.也是确定SQL语句,数据访问层,业务逻辑层,写好界面层.

十五、修改密码界面层一

十六、修改密码界面层二

十七、显示修改密码按钮及弹出第二个窗体

好了,现在我们想下修改密码我们用到了哪些SQL语句?

一条是:判断旧密码是否正确。

一条是:修改新密码。

//验证旧密码的sql

select count(*) from T_Seats where CC_AutoId= @autoId and

CC_loginPassword= @oldPwd

//执行修改密码

update T_Seats set CC_LoginPassword = @newpwd where cc_autold= @autold

有了这两个SQl语句,我们该写数据访问层那两个方法了。

十八、验证旧密码,修改密码数据访问层代码

数据访问层写好,我们就改写业务逻辑层了。业务逻辑层有什么的方法取决于现在的需求。

验证新密码是否一致,旧密码是否正确,确定它修改是否成功。封装一个方法,最后根据需求返回不同的值。

十九、写好业务逻辑层

接着我们在界面层调用一下。

二十、最后写好界面层的代码

二十一、校验程序

接下来我们说下用三层完成递归加载,和递归删除

为了方便我还是建在同一个应用程序里面。

还是写三层的步骤,现在要实现递归加载需要什么样的SQL语句。

根据父Id获取子类别,接下来写数据访问层。

单独建个表

二十二、递归加载准备工作

二十三、储存数据的model类

二十四、数据访问层的方法

要做递归加载就用到这么一个数据库的操作方法。接下来写业务逻辑层的方法,这个时候业务逻辑层没有什么逻辑处理的工作,就是拿到数据就行了,就是个打酱油的。

二十五、递归加载的两种写法

二十六、业务逻辑层用紧耦合的方法

二十七、把递归加载写到业务逻辑层中

二十八、最后改下配置文件和启动窗体

二十九、递归加载结果演示

这样写行不行?合适不合适?

不合适,为什么呢?在业务逻辑层用到了窗体中的类。当我把界面换成web之后,业务逻辑层中用的就不是这些了。

这个逻辑应该写到界面层,作为界面层的逻辑。

上面的写法是专门为windows窗体写的逻辑,紧耦合。

要是一个字符串的话,就是松耦合。因为任何的程序都有。

三十、在界面层的代码

下面我们做下删除节点,极其子节点:

大家还是想一下,当我点击按钮之后执行什么样的SQL语句。

还是先写数据访问层:

三十一、删除-数据访问层代码

三十二、删除-业务逻辑层代码

三十三、删除-界面层

三十四、怎么拿到bll层

作者近期文章列表:

C#基础教程(完全免费,献给代码爱好者的最好礼物。注:本作者分享自己精心整理的C#基础教程,无任何商业目的。
希望与更多的代码爱好者交流心得,也请高手多多指点!!!)
三层 三层(一)
SQL数据库 ADO.net 数据库的应用图解一
数据库的应用详解二
ADO.NET(内涵效率问题)
面向过程,面向对象中高级 面向过程,面向对象的深入理解一
面向过程,面向对象的深入理解二
面向对象的深入理解三
winform基础 Winform基础
winform中常用的控件
面向过程 三种循环的比较
C#中的方法(上)
我们常见的数组
面向对象 思想的转变
C#中超级好用的类
C#中析构函数和命名空间的妙用
C#中超级好用的字符串
C#中如何快速处理字符串
值类型和引用类型及其它
ArrayList和HashTable妙用一
ArrayList和HashTable妙用二
文件管理File类
多态
C#中其它一些问题的小节
GDI+ 这些年我收集的GDI+代码
这些年我收集的GDI+代码2
HTML概述以及CSS 你不能忽视的HTML语言
你不能忽视的HTML语言2精编篇
你不能忽视的HTML语言3
CSS基本相关内容--中秋特别奉献
CSS基本相关内容2
JavaScript基础 JavaScript基础一

 

转载于:https://www.cnblogs.com/fcsh820/archive/2012/10/18/2728881.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/422165.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据库的几个概念:主键,外键,索引,唯一索引

主键:主键是数据表的唯一索引,比如学生表里有学号和姓名,姓名可能有重名的,但学号确是唯一的,你要从学生表中搜索一条纪录如查找一个人,就只能根据学号去查找,这才能找出唯一的一个,…

java ee实验新闻_JAVAEE第四次作业-JSP显示新闻

JAVAEE第四次作业-JSP显示新闻一、任务使用mysql创建新闻表用户登录时,用servlet获取用户名密码,查询数据库是否存在如果是正确的用户名密码,查询新闻表,将新闻数据传给JSP首页JSP首页用EL表达式显示新闻标题列表二、任务1实验过程…

sql数据库连接不上本地数据库的解决办法

如果sql数据库连接本地的sql数据库连接不上即用.连接不上了,错误内容为: 可以执行一下以下操作:开始-sql—配置工具—sql server 外围应用配置器—服务和连接的外围应用配置器—如果服务状态为:已停止,则启动一下即可。…

python2 unicode编码_如何优雅解决python2.x的unicode编码优雅输出?

python2.x字符编码有一个这样的问题,类似下面这样:>>> d {usubType: u\u5f55\u97f3\u5ba4\u7248,uname: u\u5468\u6770\u4f26\u7684\u5e8a\u8fb9\u6545\u4e8b}>>> print d{usubType: u\u5f55\u97f3\u5ba4\u7248,uname: u\u5468\u6770…

在load事件中关闭窗体

protected override void OnVisibleChanged(EventArgs e) { base.OnVisibleChanged(e); if (isFormClose) { this.Close(); } } 转载于:https://www.cnblogs.com/zhuzhuxia/archive/2012/10/25/2739063.html

java js中 function函数报错_浅析JS中对函数function的理解(基础篇)

正文:我们知道,在js中,函数实际上是一个对象,每个函数都是Function类型的实例,并且都与其他引用类型一样具有属性和方法。因此,函数名实际上是指向函数对象的指针,不与某个函数绑定。在常见的两…

前端学习(576):margin无效情形之内联特性导致无效

当负值到达一定情况开始失效 内联的特性受到限制

jstl tag

<% taglib prefixfn urihttp://java.sun.com/jsp/jstl/functions %> ${fu:length(xxxList)}转载于:https://www.cnblogs.com/adolfmc/archive/2012/10/26/2740675.html

java windows so文件_windows下编译使用NDK,调用SO文件 | 学步园

下载后把压缩包解压出来&#xff0c;例如&#xff1a;D:\ndk&#xff0c;目录下的ndk-build.cmd就是用来编译的批处理命令。这里以D:\ndk\samples\hello-jni为例&#xff0c;打开D:\ndk\samples\hello-jni\jni\hello-jni.c查看代码&#xff1a;/** Copyright (C) 2009 The Andr…

Discuz! 防御CC攻击的设置办法

防御 CC 攻击 Discuz!5.5 在以往抗 CC 的基础上又加了两种方法&#xff0c;可以根据实际遭受攻击的情况&#xff0c;通过配置组合出适合的抵抗方法。限于篇幅&#xff0c;不详细阐述对抗原理&#xff0c;现将配置方法做下简要说明。配置文件 config.inc.php $attackevasive 0…

php 注销session_php浏览器关闭页面怎么注销session

php浏览器关闭session的方法&#xff1a;首先使用“session_start();”开启session&#xff1b;然后清空session信息&#xff1b;接着清除客户端sessionid&#xff1b;最后通过“session_destroy();”彻底销毁session即可。1、每个页面都必须开启session_start()后才能在每个页…

static的作用

static的作用 在C语言中&#xff0c;static的字面意思很容易把我们导入歧途&#xff0c;其实它的作用有三条。 &#xff08;1&#xff09;先来介绍它的第一条也是最重要的一条&#xff1a;隐藏。 当我们同时编译多个文件时&#xff0c;所有未加static前缀的全局变量和函数都具有…

一道算法题跟大家分享

无意中看到一道算法题&#xff0c;拿出我的解法与大家分享。 题目&#xff1a;输出1,2,3,4四个数字能组成的互不相同且无重复的三位数并统计满足条件的三位数个数 大家先想想&#xff0c;再看答案吧。 View Code 1 /// <summary>2 /// 计算1,2,3,4产生的组成互…