【三层登录之C#版】

前言

经历了VB.NET之后,接下来的学习就是三层,三层的学习,让我初步了解分层的思想。三层的学习,是视频中老师通过具体的一个实例来讲解的,讲解的很是详细的!通过总结,使得自己的思路更加清晰,也希望对大家有帮助

核心

(一)解决方案

解决方案,这让我们一览项目全局,知道这个项目中有什么?

(二)如何做

1.首先我们建起了自己的项目
2.之后把各层、层中的类建起来,这样大致的三层框架就出来了
3.注意,添加引用,引用的作用是很重要的
4.开始敲代码

(三)代码模块

U层:LoginUI
<span style="font-size:18px;"><span style="font-size:18px;"><span style="font-size:18px;">private void btnLogin1_Click_1(object sender, EventArgs e)
        {
            string userName = txtUserName1.Text.Trim(); //将文本框中的姓名赋值给新的变量userName
            string password = txtPassword1.Text;//同样将文本框中的密码赋值给新的变量password

            Login.BLL.LoginManager mgr = new Login.BLL.LoginManager();//实例化Login.BLL.LoginManager
            Login .Model .UserInfo user= mgr.UserLogin(userName, password);//把U层的userName,password传入实体中

           MessageBox.Show("登录用户:" + user.UserName);//提示框显示此时的登录用户
        }</span></span></span>
B层:LoginBLL
<span style="font-size:18px;"><span style="font-size:18px;"><span style="font-size:18px;">namespace Login.BLL
{
    public class LoginManager
    {
        public Login.Model.UserInfo  UserLogin(string userName,string password)
        {
            Login .DAL .UserDAO uDao = new Login.DAL.UserDAO();//实例化Login.DAL.UserDAO
            Login.Model.UserInfo user = uDao.SelectUser(userName, password);//把当前的userName, password传给实体层

            if (user !=null )//判断用户是否为空
            {
                Login.DAL.ScoreDAO sDao = new Login.DAL.ScoreDAO();//实例化Login.DAL.ScoreDAO
                sDao.Update(userName, 10);//更新该用户,给用户加分
                return user;
            }
            else
            {
                throw new Exception("登录失败");//用户为空,显示登录失败
            }
        }</span></span></span>
D层:LoginDAL
DbUtil类
<span style="font-size:18px;"><span style="font-size:18px;"><span style="font-size:18px;">namespace Login.DAL
{
    public class DbUtil
    {
        public static string ConnString = @"Server=dujuan;Database=Login;User ID=sa;Password=sjk";
        //连接数据库,Server:计算机名
    }
}</span></span></span>
userDAO类
<span style="font-size:18px;"><span style="font-size:18px;"><span style="font-size:18px;">namespace Login.DAL
{
   public  class UserDAO
    {
       public Login .Model .UserInfo SelectUser(string userName,string password)
       {
           //using后连接自动关闭
          using ( SqlConnection conn=new SqlConnection (DbUtil .ConnString )) 
          {
              
              SqlCommand cmd = conn.CreateCommand();//创建命令对象
              cmd.CommandText = @"SELECT ID,UserName,Password,Email FROM USERS 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();

              Login.Model.UserInfo user = null;
              while (reader .Read ())//读取数据,调用Read方法,判断数据库是否有数据
              {
                  if (user ==null )
                  {
                      user = new Login.Model.UserInfo();
                  }
                  user.ID=reader.GetInt32(0);
                  user.UserName = reader.GetString(1);
                  user.Password = reader.GetString(2);
                  if (!reader .IsDBNull (3))
                  {
                      user.Email = reader.GetString(3);
                  }
              }
              return user;//返回对象
          }
       }
    }
}</span></span></span>
scoreDAO类
<span style="font-size:18px;"><span style="font-size:18px;"><span style="font-size:18px;">amespace Login.DAL
{
    public class ScoreDAO
    {
        public void Update(string userName, int value)//更新
        {
            using (SqlConnection conn = new SqlConnection(DbUtil.ConnString))
            {
                SqlCommand cmd = conn.CreateCommand();//创建命令
                cmd.CommandText = @"INSERT INTO SCORES(UserName,Score)Values(@UserName,@Score)";
                cmd.Parameters.Add(new SqlParameter("@UserName", userName));
                cmd.Parameters.Add(new SqlParameter("@Score", value));

                conn.Open();//打开连接
                cmd.ExecuteNonQuery();//执行命令

            }
        }
    }
}</span></span></span>

实体层:LoginModel
<span style="font-size:18px;"><span style="font-size:18px;"><span style="font-size:18px;">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; }
    }
}</span></span></span>

(三)理解

三层:

  UI层 界面层:主要是用户看到的内容,主要作用,获取文本框中的内容:用户名和密码,将获取到的用户名和密码传送给B层。
   BLL层
业务逻辑层:将U层传送的信息传给DAL层,并接收D层返回来的查询结果。将查询结果和从U层传递来的数据进行比较。
  DAL层
数据访问层:创建数据库连接,在数据库中查询用户名和密码,将查到的结果返回给B层。最后,将结果返回给U层。
实体层
封装数据,在各层中间传递。实体层的声明的变量与数据库表是对应的,表中有多少内容,在实体层就声明多少

三层之间的引用关系(包图):



总结:

这只是刚刚开始,在下一篇博客中,我们一起来学习三层的基本知识,了解是什么?为什么?巩固基础,添砖加瓦。
评论 18
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值