三层登录实现

前言:

    上篇博客为大家详细讲解了三层的理论知识,这篇文章就由小编带领大家来实践一番吧!

    建立以下的Windows应用程序以及类库,并按照上篇文章介绍的三层架构引用原则对其进行引用:

    在UI层建立窗体:

代码展示:

 

    UI层:

private void btnLogin_Click(object sender, EventArgs e)
{
    //IDbConnection conn = new SqlConnection("c......"); //单层
    //IDbConnection cmd = conn.CreateCommand();
    //cmd.CommandText = "Select UserName From USERS WHERE...";
    //cmd.ExecuteReader();

    string userName=txtUserName.Text.Trim();
    string password=txtPassword.Text;
    //取出用户界面的数据
    Login.BLL.LoginManager mgr = new Login.BLL.LoginManager();
    Login.Model.UserInfo user = mgr.UserLogin(userName, password);

    MessageBox.Show("登录用户:" + user.UserName);  
}

    B层:

public Login.Model.UserInfo UserLogin(string userName, string password)
{
    //构建D层UserDAO实例
    Login.DAL.UserDAO uDao = new Login.DAL.UserDAO();
    Login.Model.UserInfo user = uDao.SelectUser(userName, password);

    if (user != null) //如果数据库中没有数据,即为首次登陆了,增加10积分  
    {
        Login.DAL.ScoreDAO sDao = new DAL.ScoreDAO();
        sDao.UpdateScore(userName,10);
        return user;
    }
    else
    {
        throw new Exception("登录失败。");
    }
}

    D层:

public Login.Model.UserInfo SelectUser(string userName, string password)
// 根据UI,选择返回一个user 
{
    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())
        {
            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;                    
    }
}
public class ScoreDAO
{
    public void UpdateScore(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();
        }
    }
}

 

小结:

    通过代码对三层的理解更加深入了,特别是其中互相引用的关系。在三层结构中,各层之间相互依赖,表示层依赖于业务逻辑层,业务逻辑层依赖于数据访问层。根据功能需求,从下而上设计,实际运行时,从上而下调用。

    学习永无止境,让我们继续加油吧!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 17
    评论
评论 17
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值