C#版三层登录

           c#版 三层登录

    先说一下三层,三层分为界面层(UI层),业务逻辑层(BLL层),数据访问层(DAL层)。在实现三层登录的时候的各层的功能和数据传送传送过程是这样的:

   UI层:获取用户名和密码,将获取到的用户名和密码传送给B层。

   BLL层:将U层传递过来的信息传递给DAL层,并接收D层返回来的查询结果。将查询结果和从U层传递来的数据进行比较。

   DAL层:创建数据库连接,在数据库中查询用户名和密码,将查到的结果返回给B层。

   下面用一张图来展现一下数据传送过程吧。

  C#版三层登录_第1张图片


 

  这里用到的实体并不是属于任何一个层次,起到封装数据的做用,用来传递数据的,三层中每个层次都会用到,它带着参数在三层之间流动。这是我对实体的理解。

每一层中的代码如下:

实体层:(封装、传递数据)

<span style="font-family:KaiTi_GB2312;font-size:24px;">public class UserInfo
    {
        public int Id { get; set; }
        public string UserName { get; set; }
        public string Password { get; set; }
        public string Email { get; set; }
    }</span>

U层:获取输入的用户名和密码,初始化B层,将数据传入到B层中

<span style="font-family:KaiTi_GB2312;font-size:24px;"> private void btnLogin_Click(object sender, EventArgs e)
        {
            //获取输入的用户名和密码
            string userName = txtUserName.Text.Trim();
            string passWord = txtPassword.Text;

            try 
            { 
               Login.BLL.LoginManager mgr = new Login.BLL.LoginManager();  //初始化B层中的LoginManager
               Login.Modle.UserInfo user = mgr.UserLogin(userName ,passWord );   //把获取到的信息传递给B层
               MessageBox.Show("登录用户:"+user.UserName );
            }
            catch (Exception ex)
            { 
                MessageBox.Show("用户{0}登录失败:",userName ); 
            }

        }</span>
B层:初始化D层中的对象,将数据传入到D层,并处理从D层返回来的数据。

<span style="font-family:KaiTi_GB2312;font-size:24px;">public class LoginManager
    {
        public Login.Modle.UserInfo UserLogin(string userName, string passWord)   //定义一个带有参数的方法
        {
            // throw new NotImplementedException();
            Login.DAL.UserDAO uDao = new Login.DAL.UserDAO();    //初始化D层中的对象
            Login.Modle.UserInfo user = uDao.SelectUser(userName, passWord);    //把从U层收集的信息传递给D层
            if (user != null)
            {
                Login.DAL.ScoreDAL sDao = new Login.DAL.ScoreDAL();
                sDao.UpdateScore(userName, 10);
                return user;               
            }
            else
            {
                   throw new Exception("登录失败");  //抛出异常              
            }
        }
    }</span>
D 层:建立与数据库的连接和查询语句,对数据库进行查询,将查询的结果返回给B层。

 连接数据库:

<span style="font-family:KaiTi_GB2312;font-size:24px;">class DbUtil
    {
        public static string ConnString = @"Server=LU;Database=Login;User ID =sa;Password=1";
    }</span>

<span style="font-family:KaiTi_GB2312;font-size:24px;"> public Login.Modle.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=@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.Modle.UserInfo user = null;
                while (reader.Read())
                {
                    if (user == null)
                    {
                        user = new Login.Modle.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>

 运行出来的结果:

 登录成功:

C#版三层登录_第2张图片

登录失败:

C#版三层登录_第3张图片






你可能感兴趣的:(C#版三层登录)