三层C#版实现
来源:互联网 发布:单片机连接串口扫描 编辑:程序博客网 时间:2024/06/04 22:50
三层,顾名思义就是把整个的逻辑结构分为了三个层次,整体上看这个功能有三个项目组成,分别是UI,BLL,DAL。另外还有一个之前一直没有想到的就是实体层(Model,视频中用的是这个,书上用的是s打头的一个),里面主要就是一些实体的属性和一些值,数据在UI ,BLL, DAL中传递靠的就是实体的各种属性,下面就来看一下具体是怎么实现的:
程序的主体是这样的:主要实现的是登陆的作用,主要是登陆验证,登陆成功后在Score里面写入成功数值10。
实体层(Model):
namespace Login.Model{ public class UserInfo { public int ID { get; set; } //实体属性(外部获取属性,设定属性) public string UserName { get; set; } public string Password { get; set; } public string Email { get; set; } }}
首先是UI层的建立:
namespace LoginUI{ public partial class frmLogin : Form { public frmLogin() { InitializeComponent(); } //Login.BLL.LoginService a = new Login.BLL.LoginService(); private void btnLogin_Click(object sender, EventArgs e) { //实体获值 string userName = txtUsername.Text.Trim(); //获取用户名 string password = txtPassword.Text; //获取密码 Login.BLL.LoginService svr = new Login.BLL.LoginService(); //实例化一个B层 Login.Model.UserInfo user = svr.UserLogin(userName, password); //调用B层,传入实体值 MessageBox.Show("登录用户:" + user.UserName ); //登陆成功提示 } }}
主要行为就是把值传给实例化的实体,然后把实体传给B层,调用B层的方法。
然后是Dal层(分为UserDAO和ScoreDAO两个):
链接字段:
namespace Login.DAL{ class DbUtil { public static string ConnString = @"Server=sampc;Database=Login;User ID=sa;Password=1"; //链接 }}UserDAO:
namespace Login.DAL{ public class UserDAO { public Login .Model .UserInfo SelectUser(string userName, string password) { using(SqlConnection conn = new SqlConnection(DbUtil.ConnString)) //引用的数据对象链接 { SqlCommand cmd = conn.CreateCommand(); //数据库操作对象 cmd.CommandText = "SELECT ID,UserName,Password,Email FROM USERS WHERE UserName=@UserNa me 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 (); //查询数据库 Login.Model .UserInfo user=null; //实例化Model,准备获取数据 while (reader.Read()) //数据库读取对象读数据 { if (user == null) { user = new Login.Model.UserInfo(); } user.ID = reader.GetInt32(0); user.UserName = reader.GetString(1); user.Password = reader.GetString(2); //not suggestion if(!reader.IsDBNull(3)) { user.Email = reader.GetString(3); } } return user; //返回取值是否验证成功 conn.Close(); } } }}ScoreDAO:
namespace Login.DAL{ public class ScoreDAO { public void UpdateScore(string userName, int value) //与上面类似,value是要赋值的值 { using (SqlConnection conn = new SqlConnection(DbUtil.ConnString)) { SqlCommand cmd = conn.CreateCommand(); cmd.CommandText = "INSERT INTO SCORSE(UserName,Score) Values(@UserName,@Score)";//添加记录语句 cmd.Parameters.Add(new SqlParameter("@UserName",userName)); cmd.Parameters.Add(new SqlParameter ("@Score",value )); conn.Open(); cmd.ExecuteNonQuery(); //执行查询 conn.Close(); } } }}
B层:
主要是调用D层进行一系列操作,并把值返回U层
namespace Login.BLL{ public class LoginService { public Login.Model.UserInfo UserLogin(string userName, string password) //返回类型为实体 { Login.DAL.UserDAO uDao = new Login.DAL.UserDAO(); //实例化D层对象 Login.Model.UserInfo user = uDao.SelectUser(userName,password); //实例化实体并传值调用D层查询 if (user != null) //判断D层返回值 { Login.DAL.ScoreDAO sDao = new Login.DAL.ScoreDAO(); //实例化D层Score类 sDao.UpdateScore(userName, 10); //添加数据 return user; } else { throw new Exception("登录失败。"); } } }}
总体上的数据流就是从U->B->D->B(判断)->U的过程,其中传值是以传实体的方式实现的。
传实体的好处:
我认为传实体能够满足各层调用数据的完整性和复用性,可以减少一些不必要的传多值的耦合,也保证了数据的私密性。
0 0
- 三层C#版实现
- 三层登录实现 C#版
- 三层登录C#实现
- c#三层架构实现分页
- 三层架构 C# 实现篇
- c#版三层登录
- C#版三层登录
- C#版浅谈三层
- C#版三层圆满
- 三层结构实现登录功能——C#版
- 浅析C#中三层架构的实现
- 简单的三层结构(C#实现)
- 浅析C#中三层架构的实现
- 三层架构下实现用户登陆C#
- C#三十六 三层架构的实现
- 三层登录实战C#版
- C#版的三层登陆
- 三层——c#版
- 指向子类对象的基类指针调用非虚函数都是基类的函数吗
- C语言:指针类型强制性转换
- spark分布式集群
- 系统时间
- uva 103
- 三层C#版实现
- HDOJ--2027
- 《Java编程思想》第八章 多态
- Ideal Forms响应式表单
- 程序员常去的14个顶级开发社区
- Java设计模式—单例设计模式(Singleton Pattern)完全解析
- XSS攻击(二)
- regsvr32命令集锦
- PowerPC栈帧理解