上篇文章讲到三层。接下来就通过一个实例详细的看怎么用三层实现用户登陆界面。

一、Model实体(LoginModel):

namespace LoginModel
{
//加入类:UserInfo Model实体作用:封装数据,使数据在三层中传输 。更倾向于业务逻辑层
public class UserInfo
{
//定义用户属性
public int ID { get; set; }
public string UserName { get; set; }
public string Password { get; set; } }
}

二、UI层的设计:

首先简单的界面相信大家都会:

接下来是代码:

namespace LoginUI
{
public partial class frmLogin : Form
{
public frmLogin()
{
InitializeComponent();
}
private void btnLogin_Click(object sender, EventArgs e)
{
//UI层将用户输入数据传递给BLL层
string userName = txtUserName.Text.Trim();
string password = txtPassword.Text;
LoginBLL.LoginManager mgr = new LoginBLL.LoginManager();
LoginModel.UserInfo user = mgr.UserLogin(userName, password); //将UI层返回业务层传递的数据给用户
MessageBox.Show("登陆用户:" + user.UserName);
}
}
}

三、BLL层代码

namespace LoginBLL
{
public class LoginManager
{
public LoginModel.UserInfo UserLogin(string userName, string password)
{
LoginDAL.UserDAO uDao = new LoginDAL.UserDAO();//实例化DAL层
LoginModel.UserInfo user = uDao.SelectUser(userName, password); //不需訪问数据源直接运行业务逻辑
if (user != null)
{
return user;
}
else
{
throw new Exception("登陆失败");
}
}
}
}

四、DAL层  代码

 public class UserDAO
{
public LoginModel.UserInfo SelectUser(string userName, string Password)
{ //建立数据库连接
string ConnString = @"Server=192.168.24.154;DataBase=机房收费系统人员记录; User ID=sa; Password=123";
using (SqlConnection conn = new SqlConnection(ConnString))
{
//运行SQL语句进行查询
SqlCommand cmd = conn.CreateCommand();
cmd.CommandText = @"SELECT ID,UserName,Password FROM UserInfo WHERE UserName=@UserName AND Password=@Password";
//输出查询结果
cmd.CommandType = CommandType.Text; //加入两个參数
cmd.Parameters.Add(new SqlParameter(@"UserName", userName));
cmd.Parameters.Add(new SqlParameter(@"Password", Password)); conn.Open();
SqlDataReader reader = cmd.ExecuteReader(); LoginModel.UserInfo user = null; //读取详细的数据
while (reader.Read())
{
if (user == null)
{
user = new LoginModel.UserInfo();
}
//读取查询到的数据
user.ID = reader.GetInt32(0);
user.UserName = reader.GetString(1);
user.Password = reader.GetString(2); }
return user;
}
}
}
}

登陆:

结果显示:

三层架构下实现用户登陆C#的更多相关文章

  1. MVC项目实践,在三层架构下实现SportsStore-08,部署到IIS服务器

    SportsStore是<精通ASP.NET MVC3框架(第三版)>中演示的MVC项目,在该项目中涵盖了MVC的众多方面,包括:使用DI容器.URL优化.导航.分页.购物车.订单.产品管 ...

  2. MVC项目实践,在三层架构下实现SportsStore,从类图看三层架构

    在"MVC项目实践,在三层架构下实现SportsStore-02,DbSession层.BLL层"一文的评论中,博友浪花一朵朵建议用类图来理解本项目的三层架构.于是就有了本篇: I ...

  3. MVC项目实践,在三层架构下实现SportsStore-02,DbSession层、BLL层

    SportsStore是<精通ASP.NET MVC3框架(第三版)>中演示的MVC项目,在该项目中涵盖了MVC的众多方面,包括:使用DI容器.URL优化.导航.分页.购物车.订单.产品管 ...

  4. MVC项目实践,在三层架构下实现SportsStore-01,EF Code First建模、DAL层等

    SportsStore是<精通ASP.NET MVC3框架(第三版)>中演示的MVC项目,在该项目中涵盖了MVC的众多方面,包括:使用DI容器.URL优化.导航.分页.购物车.订单.产品管 ...

  5. MVC项目实践,在三层架构下实现SportsStore-03,Ninject控制器工厂等

    SportsStore是<精通ASP.NET MVC3框架(第三版)>中演示的MVC项目,在该项目中涵盖了MVC的众多方面,包括:使用DI容器.URL优化.导航.分页.购物车.订单.产品管 ...

  6. MVC项目实践,在三层架构下实现SportsStore-04,实现分页

    SportsStore是<精通ASP.NET MVC3框架(第三版)>中演示的MVC项目,在该项目中涵盖了MVC的众多方面,包括:使用DI容器.URL优化.导航.分页.购物车.订单.产品管 ...

  7. MVC项目实践,在三层架构下实现SportsStore-05,实现导航

    SportsStore是<精通ASP.NET MVC3框架(第三版)>中演示的MVC项目,在该项目中涵盖了MVC的众多方面,包括:使用DI容器.URL优化.导航.分页.购物车.订单.产品管 ...

  8. MVC项目实践,在三层架构下实现SportsStore-06,实现购物车

    SportsStore是<精通ASP.NET MVC3框架(第三版)>中演示的MVC项目,在该项目中涵盖了MVC的众多方面,包括:使用DI容器.URL优化.导航.分页.购物车.订单.产品管 ...

  9. MVC项目实践,在三层架构下实现SportsStore-07,实现订单提交

    SportsStore是<精通ASP.NET MVC3框架(第三版)>中演示的MVC项目,在该项目中涵盖了MVC的众多方面,包括:使用DI容器.URL优化.导航.分页.购物车.订单.产品管 ...

随机推荐

  1. 原生js实现ajax跨域(兼容IE8,IE9)

    html设置meta标签兼容360兼容模式和IE怪异模式 <meta http-equiv="X-UA-Compatible" content="IE=9;IE=8 ...

  2. LeetCode(13):罗马数字转整数

    Easy! 题目描述: 罗马数字包含以下七种字符:I, V, X, L,C,D 和 M. 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M 1000 例如, 罗马数字 2 写 ...

  3. DedeCMS常见问题和技巧

    1: dedecms 访问空白(织梦如何显示详细错误) 我们在使用织梦的时候,有的时候会遇到访问空白的情况,尤其是再刚刚搬家之后,织梦会出现访问空白或者返给您一个500的友好界面错误,遇到这种情况该怎 ...

  4. Windows自动联网修复系统损坏文件

    sfc修复: Win+X---命令提示符(管理员)---sfc /scannow---Enter可以查看是否存在系统文件损坏等问题 以管理员权限运行命令提示符,执行“dism /online /cle ...

  5. 解决RabbitMQ service is already present - only up...

    C:\Users\Administrator>rabbitmq-service install RabbitMQ service is already present - only updati ...

  6. 【LOJ】#2509. 「AHOI / HNOI2018」排列

    题解 虽然要求一个dfs序,但是不是从根开始贪心 从最小的点开始贪心,最小的点显然是父亲选了之后马上就选它 那么我们每次把最小的点和父亲合并,两个联通块之间也是如此 对于两个联通块,他们合并的顺序应该 ...

  7. 【Java】 大话数据结构(6) 栈的顺序与链式存储

    本文根据<大话数据结构>一书,实现了Java版的栈的顺序存储结构.两栈共享空间.栈的链式存储机构. 栈:限定仅在表尾进行插入和删除操作的线性表. 栈的插入(进栈)和删除(出栈)操作如下图所 ...

  8. MySQL 索引原理概述及慢查询优化实战

    MySQL凭借着出色的性能.低廉的成本.丰富的资源,已经成为绝大多数互联网公司的首选关系型数据库.虽然性能出色,但所谓“好马配好鞍”,如何能够更好的使用它,已经成为开发工程师的必修课,我们经常会从职位 ...

  9. java轻松实现无锁队列

    1.什么是无锁(Lock-Free)编程 当谈及 Lock-Free 编程时,我们常将其概念与 Mutex(互斥) 或 Lock(锁) 联系在一起,描述要在编程中尽量少使用这些锁结构,降低线程间互相阻 ...

  10. 003.KVM虚拟机部署-CentOS6.8

    一 实验说明 CentOS 7的KVM虚拟机推荐使用qcow2磁盘格式,本实验在KVM中安装CentOS 6.8 64虚拟机. 二 命令部署过程 2.1 上传镜像 使用winscp上传至/data/i ...