三层登录—c#

Posted 刘飞宏

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了三层登录—c#相关的知识,希望对你有一定的参考价值。

    学习了三层,有一个登录窗体的小练习,是我们第一次接触三层的初战。现在只是简单的了解了一些,需要学习的还有很多,下面浅谈自己的理解。

    我们说的三层就是分层了显示层、业务逻辑层和数据访问层,其中显示层是直接和客户打交道的,是用户的显示界面;而业务逻辑层是处理业务的,是中间的桥梁,联系着显示层和数据访问层,把用户的请求进行分析处理,在给数据源写入;那么数据访问层是做什么的呢?主要操纵数据库,对数据库中的数据进行增删改查的处理。这样各个层次就有了自己特定的功能,达到了高内聚低耦合的效果。

这是一个简单的登录窗体的实现过程。

技术分享

【显示UI层】

<span style="font-family:KaiTi_GB2312;font-size:18px;">    private void btnOK_Click(object sender, EventArgs e)//登录按钮
        string UserName=txtUserName.Text.Trim ();//用户名赋值给UserName
        string Password=txtPassWord .Text ;     //密码赋值给Password
        Login<span style="color:#FF0000;">.<strong>BLL.LoginManager</strong></span> mgr = new Login.BLL.LoginManager();//实例化出BLL层中的LoginManager,两个引用的实现
        Login.<span style="color:#333333;"><strong>Model.UserInfo</strong></span> user=mgr.UserLogin(UserName, Password);//调用BLL层中的方法UserLogin
        MessageBox.Show("登录用户:" + user.UserName);</span>

【业务逻辑层BLL层】

<span style="font-family:KaiTi_GB2312;font-size:18px;">    public class  <span style="color:#FF0000;"><strong>LoginManager</strong></span>//调用BLL层中的LoginManager
    {
        public Login.Model.UserInfo <span style="color:#FF0000;"><strong>UserLogin</strong></span>(string UserName,string Password)
        {
            Login.<span style="color:#FF0000;"><strong>DAL.UserDAO</strong></span> uDao = new Login.DAL.UserDAO();//实例化DAL层中的UserADO
            Login.<strong>Model.UserInfo</strong> user=uDao.SelectUser(UserName, Password);//在数据层DAL,调用方法SelectUser判断用户名和密码
            if (user!=null)
            {
                Login.DAL.ScoreDAO sDao = new Login.DAL.ScoreDAO();//实例出DAL层的ScoreDAO,对登录成功的用户进行加分操作
                sDao.UpdateScore(UserName, 10);
                return user;
            }
            else
            {
                throw new Exception("登录失败");
            }
        }
</span>

【数据访问层DAL】

<span style="font-family:KaiTi_GB2312;font-size:18px;">public static string conString = @"Server=LFH;Database=LoginSanCeng;User ID=sa;Password=1";//链接数据库

public  Login.Model.UserInfo <span style="color:#FF0000;"><strong>SelectUser</strong></span>(string UserName,string Password)
        {
            using (SqlConnection conn = new SqlConnection(DBUtil.conString)) //通过参数DBUtil.conString打开连接数据
            {
                SqlCommand cmd = conn.CreateCommand();//创建cmd执行sql语句
                cmd.CommandText = @"SELECT ID,UserName,Password,Emall FROM Users WHERE [email protected] AND [email protected]";//sql语句
                cmd.CommandType = CommandType.Text;
                cmd.Parameters.Add(new SqlParameter("@UserName", UserName));//Parameters添加参数
                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);
                    if (!reader.IsDBNull(3))
                    {
                        user.Emall = reader.GetString(3);
                    }            
                }
                return user;
            }
        }
    }

public void <span style="color:#FF0000;"><strong>UpdateScore</strong></span>(string UserName,int value)//更新分数操作
        {
            using (SqlConnection conn=new SqlConnection(DBUtil.conString ))//打开数据库链接
            {
                SqlCommand cmd = conn.CreateCommand ();//创建执行sql语句
                cmd.CommandText = @"INSERT INTO SCORE(UserName,Score) Values(@UserName,@Score)";//sql语句
               cmd.Parameters.Add(new SqlParameter("@UserName", UserName));添加到数据库中
                cmd.Parameters.Add(new SqlParameter("@Score", value));
                //cmd.Parameters.Add(new SqlParameter("@ID", value));
                conn.Open();打开数据库
                cmd.ExecuteNonQuery();//执行sql语句,返回整数变量
            }
        }</span>

    其中三层登录就是UI层引用BLL层的逻辑进行业务分析,BLL层引用DAL层进行数据判断,如果数据正确用户可以登录成功通过BLL层返回给UI层,UI显示给客户。Model层是封装数据的,提供给其他三个层次,它是独立的,不引用任何层的逻辑,甚至不知道其他层次的存在,只是提供了服务,是最无私的。UI引用了BLL层和Model层,BLL层引用DAL和Model层,从而实现了UI层和DAL的间接联系,而DAL层引用了Model层,主要是对数据库的操作。

     三层就是把一个系统分成部分,每个部分负责一定的职责,各尽其职,各司其守,不可越俎代!





以上是关于三层登录—c#的主要内容,如果未能解决你的问题,请参考以下文章

C# Dapper基本三层架构使用 (Web UI层)

C# Winform 三层架构

C# 分层 三层架构 Very Very Good!

三层架构初步理解

C# Dapper基本三层架构使用 (DAL)

温故而知新---浅析三层架构(一个超简单的系统登录三层架构实例)