【C#】三层登录

【C#】三层登录

架构

U层调用B层,B层调用D层,大家都调用实体层

代码

U层

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace UI
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void cmdLogin_Click(object sender, EventArgs e)
        {
            //显示层绝对不能跟数据源打交道
            try
            {
                string userName = txtUserName.Text.Trim();
                string password = txtPassword.Text;
                BLL.BLL.Administrator admin = new BLL.BLL.Administrator();
                Model.Model.UserInfo user = admin.UserLogin(userName, password);
                MessageBox.Show("登录用户:" + user.UserName);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }



        }

    }
}

B层

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data.SqlClient;

namespace BLL.BLL
{
    public class Administrator
    {
        public Model.Model.UserInfo UserLogin(string userName, string password) 
        {
            DAL.DAL.UserDAO uDao = new DAL.DAL.UserDAO();
            Model.Model.UserInfo user = uDao.SelectUser(userName, password);

            if (user != null)
            {
                DAL.DAL.ScoreDAO sDao = new DAL.DAL.ScoreDAO();
                sDao.UpdateScore(user.ID,userName, 10);
                return user;
            }
            else
            {
                throw new Exception("登录失败。");
            }

        }
    }
}

D层

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
//using System.Data;
//using System.Data.SqlClient;

namespace DAL.DAL
{
    class DbUtil
    {
        public static string ConnString = @"Server=.;Database=Login;User ID=sa;Password=123456";
    }
}





using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data.SqlClient;

namespace DAL.DAL
{
    public class ScoreDAO//首次登录,增加10积分
    {
        public void UpdateScore(int ID, string userName, int value)
        {
            using (SqlConnection conn = new SqlConnection(DbUtil.ConnString))
            {
                SqlCommand cmd = conn.CreateCommand();  //创建一个命令对象
                cmd.CommandText = @"INSERT INTO SCORES(ID,UserName,Score) Values(@ID,@UserName,@Score)";  //修改Score表数据
                cmd.Parameters.Add(new SqlParameter("@ID", ID)); 
                cmd.Parameters.Add(new SqlParameter("@userName", userName));
                cmd.Parameters.Add(new SqlParameter("@Score", value));


                conn.Open();
                cmd.ExecuteNonQuery();
            }
        }
    }
}



using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data.SqlClient;
using System.Data;

namespace DAL.DAL
{
    public class UserDAO
    {
        public Model.Model.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();

                Model.Model.UserInfo user=null;
                while(reader.Read())
                {
                    if (user ==null)//如果没有,则重新生成一个
                    {
                        user = new Model.Model.UserInfo();

                    }
                    user.ID = reader.GetInt32(0);
                    user.UserName = reader.GetString(1);
                    user.Password = reader.GetString(2);
                    user.Email = reader.GetString(3);

                }
                return user;


            }

        }

    }
}

Model层

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
//在三层之间传输数据,不知道其他各个层次,独立于三个程序集不引用其他三层
namespace Model.Model
{

    //一般封装数据,业务逻辑层
    public class UserInfo
    {
        public int ID { get; set; }
        public string UserName { get; set; }
        public string Password { get; set; }
        public string Email { get; set; }



    }
}

tips

1.user表中要提前插入用户名和密码等信息,作为原始管理员

2.成功登录后,再次登录要删除插入的score表数据

3.重新生成解决方案

猜你喜欢

转载自blog.csdn.net/jing875480512/article/details/79292521