三层代码实现

UI层:

  private void Button1_Click(object sender, EventArgs e)
        {
            string userName = txtuserName.Text.Trim();
            string password = txtpassword.Text;
            LoginBLL.LoginManaer mgr = new LoginBLL.LoginManaer();//实例化这个业务层类
            LoginModel.UserInfo user = mgr.UserLogin(userName, password);//将信息给model层
            MessageBox.Show("登录用户:" + user.UserName);//返回UI层         
        }

BLL层:

  public LoginModel.UserInfo UserLogin(string userName,string password)//获取用户传来的信息。
        {         

            //需要和数据源打交道,实例化DAL层
            LoginDAL.UserDAO uDao = new LoginDAL.UserDAO();

            LoginModel.UserInfo user = uDao.SelectUser(userName, password);

            if (user !=null)//登录成功时
            {
                LoginDAL.ScoreDAO sDao = new LoginDAL.ScoreDAO();//增加积分。
                sDao.UpdateScore(userName, 10);
                return user;
            }

            else
            {              
                throw new Exception("登录失败");//没有登录成功跳到这里
            }

        }
    }

DAL层User层:

  public LoginModel.UserInfo SelectUser(string userName,string password )
        {
            
            //using 打开了数据库连接,从数据库中读取数据。
            using (SqlConnection conn = new SqlConnection(DbUtil.ConnString))//此行代码是登录SQL Server用的。
            {
                //sqlcommand 表示可以对SQL Server数据库进行的操作。
                SqlCommand cmd = conn.CreateCommand();
                //获取数据表名
                cmd.CommandText = @"SELECT ID,UserName,Password,Email FROM USERS WHERE UserName=@UserName AND Password=@Password";
                //而CommandType是一个枚举类型。有三个值:text、StoredProcedure、TableDirect用于表示SqlCommand对象CommandType的执行形式。
                cmd.CommandType = CommandType.Text;//不写也可以的,因为Text是默认的

                //声明两个参数. Parameters是范围的意思。
                cmd.Parameters.Add(new SqlParameter("@UserName", userName));
                cmd.Parameters.Add(new SqlParameter("@Password", password));

                //登录数据库
                conn.Open();

                //要想使用SqlDateReader ,就必须引用上面的client命名空间。 并且如果想创建SqlDateReader,必须使用ExecuteReader方法。
                SqlDataReader reader = cmd.ExecuteReader();//对数据库进行查询得到结果,并且返回对象。

                LoginModel.UserInfo user = null;//先构造LoginModel,首先默认值为NULL

                while (reader.Read())//开始读取数据,如果用户名和密码不正确,无法读取数据,直接返回user为null。
                {
                    if (user==null)//如果是null的话,再进行构造。
                    {
                        user = new LoginModel.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;
            }
        }

Score层:

  public void UpdateScore(string userName,int value)//加分
        {
            //throw new NotFiniteNumberException();
            using (SqlConnection conn = new SqlConnection(DbUtil.ConnString))
            {
                SqlCommand cmd = conn.CreateCommand();
                cmd.CommandText = @"INSERT INTO Score(UserName,Score) Values(@UserName,@Score)";
                cmd.Parameters.Add(new SqlParameter("@UserName", userName));
                cmd.Parameters.Add(new SqlParameter("@Score", value));

                conn.Open();
                cmd.ExecuteNonQuery();//必须引用using System.Data.SqlClient;此代码用来更新数据库。
            }
        }

登录层:

 class DbUtil//工具类
    {
        //登录SQL Server代码
        public static string ConnString = @"Server=(local); Database=Login; User=sa; Password=12345";

    }
}

Model层:

public class UserInfo
    {
        public int ID { get; set; }
        public string UserName { get; set; }
        public string Password { get; set; }
        public string Email { get; set; }

    }
发布了109 篇原创文章 · 获赞 17 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/aaaPostcard/article/details/91351561