一个简单的三层架构之用户登陆和注册在数据库中的存储

一个简单的三层架构之用户登陆和注册在数据库中的存储

本人为一小白菜鸟,在不断学习的过程中将自己学习所得的经验分享给大家。
今天为大家介绍的是一个小实现,一个三层架构的小实现,关于登陆界面用户名输入与注册与数据库的连接和匹配功能。
首先,简单介绍一下三层架构。看到很多同学和共同学习的朋友对数据库很是头疼,为什么?因为数据库感觉很复杂和麻烦,每实现一个增删改查的功能就要重复的连接和调用数据库,而三层架构则很轻松的解决了这个问题。
分为三个层次,DAL,model和BLL层,model层在创建的时候是一个类,但是在使用的时候,它并不是一个类,而是一个对象,它具有我们想要针对的对象的属性,这里我们可以理解为我们这个小程序的用户user;DAL层可以有多个定义,在这里我们只是简单实现我们的登陆界面,因此在这里它只有userdal和sqlhelper两个类文件,DAL封装了对数据库操作的所有动作(函数),包括增删改查,而所有的sql语句只在这里面出现,以实现我们的重复使用;BLL我用的时候就直接和UI层合并了,也就是说它就是调用对数据库的增删改查的一切操作的函数,实现用户和数据库进行搭桥的过程。

以下为资源管理器中的文件
一个简单的三层架构之用户登陆和注册在数据库中的存储_第1张图片
下面为实现登陆和注册功能的相关代码

代码块

class sqlhelper
    {
        private static readonly string connstr= ConfigurationManager.ConnectionStrings["connstr"].ConnectionString;
        public static int ExecuteNonQuery(string cmdText,
            params SqlParameter[] parameters)
        {
            using (SqlConnection conn = new SqlConnection(connstr))
            {
                conn.Open();
                using (SqlCommand cmd = conn.CreateCommand())
                {
                    cmd.CommandText = cmdText;
                    cmd.Parameters.AddRange(parameters);
                    return cmd.ExecuteNonQuery();
                }
            }
        }

        public static object ExecuteScalar(string cmdText,
            params SqlParameter[] parameters)
        {
            using (SqlConnection conn = new SqlConnection(connstr))
            {
                conn.Open();
                using (SqlCommand cmd = conn.CreateCommand())
                {
                    cmd.CommandText = cmdText;
                    cmd.Parameters.AddRange(parameters);
                    return cmd.ExecuteScalar();
                }
            }
        }

        public static DataTable ExecuteDataTable(string cmdText,
            params SqlParameter[] parameters)
        {
            using (SqlConnection conn = new SqlConnection(connstr))
            {
                conn.Open();
                using (SqlCommand cmd = conn.CreateCommand())
                {
                    cmd.CommandText = cmdText;
                    cmd.Parameters.AddRange(parameters);
                    using (SqlDataAdapter adapter = new SqlDataAdapter(cmd))
                    {
                        DataTable dt = new DataTable();
                        adapter.Fill(dt);
                        return dt;
                    }
                }
            }
        }

        public static SqlDataReader ExecuteDataReader(string cmdText,
            params SqlParameter[] parameters)
        {
            SqlConnection conn = new SqlConnection(connstr);
            conn.Open();
            using (SqlCommand cmd = conn.CreateCommand())
            {
                cmd.CommandText = cmdText;
                cmd.Parameters.AddRange(parameters);
                return cmd.ExecuteReader(CommandBehavior.CloseConnection);
            }
        }

    }
class userdal
    {
        public int  addnew(user p)
        {
            object obg = null;
            //sqlhelper h = new sqlhelper();

            obg= sqlhelper.ExecuteScalar(
                "insert into users (username,userpwd,userright) values(@username,@userpwd,@userright);select  @@identity"
                , new System.Data.SqlClient.SqlParameter("username", p.username), new System.Data.SqlClient.SqlParameter("userpwd", p.userpwd)
                , new System.Data.SqlClient.SqlParameter("userright", p.userright)
                );
            return Convert.ToInt32(obg);
        }
        public int delect(string username)
        {
            return sqlhelper.ExecuteNonQuery("delect from users where username=@uasername", new System.Data.SqlClient.SqlParameter("username", username));
        }
        public int update(user p)
        {
            return sqlhelper.ExecuteNonQuery("update users set username=@username ,userpwd=@userpwd where username=@username",
                new System.Data.SqlClient.SqlParameter("username", p.username), new System.Data.SqlClient.SqlParameter("userpwd", p.userpwd));

        }
        public user get(string username)
        {
            DataTable data = sqlhelper.ExecuteDataTable("select * from users where username=@username", new System.Data.SqlClient.SqlParameter("username", username));
            if (data.Rows.Count <= 0)
                return null;
            else if (data.Rows.Count == 1)
            {
                user result = new user();
                DataRow r = data.Rows[0];
                result.username = (string)r["username"];
                result.userpwd = (string)r["userpwd"];
                result.userright = (string)r["userright"];
                return result;
            }
            else
                throw new Exception("出现多条数据!");


        }
        public DataTable get()
        {
            DataTable dt = sqlhelper.ExecuteDataTable("select * from users");
            return dt;
        }

    }
class user
    {
        public string username { get; set; }
        public string userpwd { get; set; }
        public string userright { get; set; }

    }

下面为在ui层中的实现的代码
登陆操作,实现在数据库中的查找和匹配,找到就登陆进入主菜单,找不到提示错误信息

private void button1_Click(object sender, EventArgs e)
        {
            user u = new user();
            userdal dal = new userdal();
            u = dal.get(textBox1.Text);
            if (u == null)
            {
                MessageBox.Show("此用户名不存在!");
            }
            else
            {
                user u1 = new user();
                u1.username = textBox1.Text;
                u1.userpwd = textBox2.Text;
                u1.userright = "";
                if(u1.username==u.username&&u1.userpwd==u.userpwd)
                {
                    mainmanu m = new mainmanu();
                    this.Hide();
                    m.Show();
                }
                else
                {
                    MessageBox.Show("用户名与密码不匹配!");
                }

            }



        }

注册窗口,实现在数据库中加入用户的数据元的操作

private void button1_Click(object sender, EventArgs e)
        {
            user u = new user();
            userdal dal = new userdal();

            u = dal.get(textBox1.Text);
            if(u==null)
            {

                int id;
                u = new user();
                u.username = Convert.ToString(textBox1.Text);
                u.userpwd = Convert.ToString(textBox2.Text);
                u.userright = "0";
                id = dal.addnew(u);
                MessageBox.Show((Convert.ToString(id)));
            }
            else
                MessageBox.Show("用户重复,请重新输入!");

        }

下面为调试过程,剩下的管理员权限和实现对用户的增删改查可以作为接下来的学习。
登陆失败
一个简单的三层架构之用户登陆和注册在数据库中的存储_第2张图片
注册成功
一个简单的三层架构之用户登陆和注册在数据库中的存储_第3张图片
注册失败
一个简单的三层架构之用户登陆和注册在数据库中的存储_第4张图片
登陆成功并且进入管理员界面查看用户信息
一个简单的三层架构之用户登陆和注册在数据库中的存储_第5张图片


你可能感兴趣的:(ADO.net)