一個簡單的三層架構之用戶登陸和註冊在數據庫中的存儲

一個簡單的三層架構之用戶登陸和註冊在數據庫中的存儲

本人爲一小白菜鳥,在不斷學習的過程中將自己學習所得的經驗分享給大家。
今天爲大家介紹的是一個小實現,一個三層架構的小實現,關於登陸界面用戶名輸入與註冊與數據庫的連接和匹配功能。
首先,簡單介紹一下三層架構。看到很多同學和共同學習的朋友對數據庫很是頭疼,爲什麼?因爲數據庫感覺很複雜和麻煩,每實現一個增刪改查的功能就要重複的連接和調用數據庫,而三層架構則很輕鬆的解決了這個問題。
分爲三個層次,DAL,model和BLL層,model層在創建的時候是一個類,但是在使用的時候,它並不是一個類,而是一個對象,它具有我們想要針對的對象的屬性,這裏我們可以理解爲我們這個小程序的用戶user;DAL層可以有多個定義,在這裏我們只是簡單實現我們的登陸界面,因此在這裏它只有userdal和sqlhelper兩個類文件,DAL封裝了對數據庫操作的所有動作(函數),包括增刪改查,而所有的sql語句只在這裏面出現,以實現我們的重複使用;BLL我用的時候就直接和UI層合併了,也就是說它就是調用對數據庫的增刪改查的一切操作的函數,實現用戶和數據庫進行搭橋的過程。

以下爲資源管理器中的文件
這裏寫圖片描述
下面爲實現登陸和註冊功能的相關代碼

代碼塊

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("用戶重複,請重新輸入!");

        }

下面爲調試過程,剩下的管理員權限和實現對用戶的增刪改查可以作爲接下來的學習。
登陸失敗
這裏寫圖片描述
註冊成功
這裏寫圖片描述
註冊失敗
這裏寫圖片描述
登陸成功並且進入管理員界面查看用戶信息
這裏寫圖片描述


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章