简单三层登录

     简单的聊一下写这篇博客的背景,在敲三层的时候,用的是自己的数据库,所以在敲完后出现不少问题。敲三层的视频还是有漏洞的,他只能在显示登录成功,却不能显示登录失败,只要你输入的用户名和密码不正确,就会报错。

     在敲登录窗体时,在三层之间的数据转换的大概思路就是,U层调用B层,B层调用D层,这三层都会调用实体层,实体层就像VB中的模块一样。D层中是写与连接调用数据库相关的东西的,所以我们一般就会从D层开始写起。

   输入密码后调用的顺序是这样的:

    


    实体层声明用户名和密码

<span style="font-size:18px;"> public  class LoginInfo//声明一个公共访问类实体
    {
        private string _UserName;//声明私有字段值用户名
        public string UserName//声明共有属性用户名(在外界可以访问到)
        {
            get { return _UserName; }
            set { _UserName = value; }
        }
        private string _Password;//声明字段密码
        public string Password  //声明可以访问的属性密码
        {
            get { return _Password; }
            set { _Password = value; }
        }
        private string _ID;
        public string ID
        {
            get { return _ID; }
            set { _ID = value; }
        }

       
    }</span>

      

     D层分为两个部分 一个是连接数据库的DBUtil.cs类,一个是读数据库用户名和密码的LoginDAL.cs类

<span style="font-size:18px;"> public  class DBUtil
    {
       public static string connString = @"Server=(local);Database=charge_sys;User ID=sa;password=123456";
    }</span>

     Server:服务器的名称 可以是(local)也可以用" ."(点)表示,我用的是机房收费的数据库,所以数据库名称是Charge_sys.  

<span style="font-size:18px;"> public EntityClass.LoginInfo SelectUser(string userID, string PWD)
        
          {
               using (SqlConnection  conn = new SqlConnection(DBUtil.connString)) 
                {
                    SqlCommand cmd = conn.CreateCommand();
                    cmd.CommandText = @"SELECT userID,PWD From User_Info WHERE userID=@userID AND PWD=@PWD";//Select 字段 From 数据库表 Where 字段名=@字段名 AND 密码=@密码
                    cmd.CommandType = CommandType.Text; //获取或设置一个值,该值指示如何解释commandText属性
                    cmd.Parameters.Add(new SqlParameter("@userID", userID));//设置参数用户名
                    cmd.Parameters.Add(new SqlParameter("@PWD", PWD));//设置参数密码
                    conn.Open();//打开连接
                    SqlDataReader reader=cmd.ExecuteReader();//用户对用户进行查询操作,sqlDataReader在数据库中进行逐行读取
                    EntityClass.LoginInfo user = null; //构造User 默认值是null
                    while (reader.Read())//读取具体数据
                    {
                       reader.GetInt32(0);
                       
                       
                           if (user ==null )
                           {
                               user = new EntityClass.LoginInfo();//实例化实体层
                           }

                          user.UserName = reader.GetInt32(0).ToString();//读取数据库第0列中内容(读取用户名)
                          user.Password = reader.GetString (1);//读取数据库中密码
                          
                      
                     
                   }
                    return user;
            }
        }  </span>

 在逻辑层进行判断


在U层参数有相应的变化


<span style="font-size:18px;"> private void btnLogin_Click(object sender, EventArgs e)
        {
            string UserName = txtUserName.Text.Trim();
            string password = txtPassword.Text;
            string msg;
            msg="";
            ChargeSystem.BLL.LoginClass mgr = new ChargeSystem.BLL.LoginClass();//实例化逻辑业务层
            EntityClass.LoginInfo user = mgr.Login(UserName, password,out msg );
            MessageBox.Show(msg);
            
        }</span>

    


   

  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 36
    评论
评论 36
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值