畢業后,第一份工作是寫單片機(C)代碼的,這一份也是寫C代碼的(emmmmmmmmm,雖然入職兩個多月了一行代碼也沒寫過啊哈哈哈哈),所以好久沒寫過博客了,周末沒事干(沒有女朋友,單身23年嗚嗚嗚嗚嗚)就學了下C#和MySQL,然后就寫了個最簡單的類似於“hello world”的小項目-圖書管理系統,這部分博文只有用戶管理部分的,這篇文章主要是記錄自己的學習過程。
C#沒什么好說的,只不過是一種面向對象編程語言,大學期間上課不認真聽講學習的,啊哈哈哈哈,MySQL是在bilibili看某智博客的視頻學的,都算是半路出家的,所以博文水平低,質量差大佬勿噴,當然這也是我自己學習的記錄,大佬可以細心指教,千恩萬謝。
首先說下C#的三層架構,如下這段話是從大佬的博客里面學習的:
三層架構分為:表現層(UI(User Interface))、業務邏輯層(BLL(Business Logic Layer))、數據訪問層(DAL(Data Access Layer))再加上實體類庫(Model)。實體類庫(Model),主要存放數據庫中的表字段;數據訪問層(DAL),主要是存放對數據類的訪問,即對數據庫的添加、刪除、修改、更新等基本操作;業務邏輯層(BLL)對傳送數據進行邏輯判斷分折,並進行傳送正確的值;表現層(UI)即用戶界面層。
如下圖所示,是我的工程文件結構,2_StudentForm是表示(UI)層,添加的是Windows窗體應用程序;StudentBLL是業務邏輯層,StudentDAL是數據訪問層,StudentModel是實體類庫,這三個均是類庫。
UI層沒什么好說的,我這種菜鳥還是喜歡拖控件,然后寫需要的事件就行。
Model層與數據庫字段表相對應,如下:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace StudentModel { public class UserInfoModel { /// <summary> /// 用戶ID /// </summary> public int Id { get; set; } /// <summary> /// 用戶名 /// </summary> public string Name { get; set; } /// <summary> /// 密碼 /// </summary> public string Pwd { get; set; } } }
DAL是數據庫操作的相關代碼,在DAL類庫中引用Model類庫,我就寫了最基礎的sql操作代碼,如下:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using StudentModel; using MySql.Data.MySqlClient; using System.Data; namespace StudentDAL { public class UserInfoDAL { const string str = "server = localhost;user = root;password=1234;database = student"; MySqlConnection conn = new MySqlConnection(str); /// <summary> /// 從數據庫查找用戶 /// </summary> /// <param name="_userInfoModel"></param> /// <returns></returns> public UserInfoModel MySqlSelectUser(UserInfoModel _userInfoModel) { conn.Open(); string sqlstr = String.Format("select * from userinfo where name = '{0}' and pwd = '{1}'", _userInfoModel.Name, _userInfoModel.Pwd); MySqlCommand cmd = new MySqlCommand(sqlstr, conn); MySqlDataReader reader = cmd.ExecuteReader(); UserInfoModel user = new UserInfoModel(); if(reader.Read()) { user.Id = reader.GetInt32(0); user.Name = reader.GetString(1); user.Pwd = reader.GetString(2); } conn.Close(); return user; } /// <summary> /// 從數據庫查找用戶名 /// </summary> /// <param name="_userInfoModel"></param> /// <returns></returns> public UserInfoModel MySqlSelectName(UserInfoModel _userInfoModel) { conn.Open(); string sqlstr = String.Format("select * from userinfo where name = '{0}'", _userInfoModel.Name); MySqlCommand cmd = new MySqlCommand(sqlstr, conn); MySqlDataReader reader = cmd.ExecuteReader(); UserInfoModel user = new UserInfoModel(); if (reader.Read()) { user.Id = reader.GetInt32(0); user.Name = reader.GetString(1); user.Pwd = reader.GetString(2); } conn.Close(); return user; } /// <summary> /// 查詢所有數據 /// </summary> /// <returns></returns> public List<UserInfoModel> MySqlSelectUserAll() { List<UserInfoModel> list = new List<UserInfoModel>(); conn.Open(); string sqlstr = "select * from userinfo"; DataTable dt = new DataTable(); MySqlDataAdapter rd = new MySqlDataAdapter(sqlstr, conn); rd.Fill(dt); foreach (DataRow dr in dt.Rows) { UserInfoModel ai = new UserInfoModel { Id = Convert.ToInt32(dr["Id"]), Name = dr["Name"].ToString(), Pwd = dr["Pwd"].ToString() }; list.Add(ai); } conn.Close(); return list; } /// <summary> /// 刪除用戶 /// </summary> /// <param name="_userInfoModel"></param> public int MySqlDelUser(UserInfoModel _userInfoModel) { conn.Open(); string sqlstr = String.Format("delete from userinfo where name = '{0}'", _userInfoModel.Name); MySqlCommand cmd = new MySqlCommand(sqlstr, conn); int iRet = cmd.ExecuteNonQuery(); conn.Close(); return iRet; } /// <summary> /// 插入數據 /// </summary> /// <param name="_userInfoModel"></param> /// <returns></returns> public int MySqlInsertUser(UserInfoModel _userInfoModel) { conn.Open(); string sqlstr = String.Format("insert into userinfo (name,pwd) values('{0}','{1}')",_userInfoModel.Name,_userInfoModel.Pwd); MySqlCommand cmd = new MySqlCommand(sqlstr, conn); int iRet = cmd.ExecuteNonQuery(); conn.Close(); return iRet; } /// <summary> /// 更新數據 /// </summary> /// <param name="_userInfoModel"></param> /// <returns></returns> public int MySqlUpdateUserPwd(UserInfoModel _userInfoModel) { conn.Open(); string sqlstr = String.Format("update userinfo set Pwd = '{0}' where name = '{1}'",_userInfoModel.Pwd,_userInfoModel.Name); MySqlCommand cmd = new MySqlCommand(sqlstr, conn); int iRet = cmd.ExecuteNonQuery(); conn.Close(); return iRet; } } }
BLL是界面操作所做的相關處理,在BLL類庫中引用DAL和Model類庫,如下:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using StudentDAL; using StudentModel; namespace StudentBLL { public class UserInfoBLL { /// <summary> /// 判斷用戶是否存在 /// </summary> /// <param name="name"></param> /// <param name="pwd"></param> /// <returns></returns> public bool CheckUserExist(string name,string pwd) { UserInfoModel user = new UserInfoModel(); user.Name = name; user.Pwd = pwd; UserInfoDAL userInfoDAL = new UserInfoDAL(); UserInfoModel userInfoModel = userInfoDAL.MySqlSelectUser(user); if (userInfoModel.Name == name && userInfoModel.Pwd == pwd) { return true; } else { return false; } } /// <summary> /// 判斷用戶名是否存在 /// </summary> /// <param name="name"></param> /// <returns></returns> public bool CheckUserName(string name) { UserInfoModel user = new UserInfoModel(); user.Name = name; UserInfoDAL userInfoDAL = new UserInfoDAL(); UserInfoModel userInfoModel = userInfoDAL.MySqlSelectName(user); if (userInfoModel.Name == name) { return true; } else { return false; } } /// <summary> /// 查看所有的用戶 /// </summary> public List<string> CheckAllUser() { List<UserInfoModel> userInfoModel = new List<UserInfoModel>(); List<string> list = new List<string>(); UserInfoDAL userInfoDAL = new UserInfoDAL(); userInfoModel = userInfoDAL.MySqlSelectUserAll(); for (int i = 0; i < userInfoModel.Count; i++) { list.Add(userInfoModel[i].Name); } return list; } /// <summary> /// 刪除所選中的用戶 /// </summary> public bool DelSelUser(string selname) { UserInfoModel userinfomodel = new UserInfoModel(); UserInfoDAL userinfodal = new UserInfoDAL(); userinfomodel.Name = selname; if (userinfodal.MySqlDelUser(userinfomodel) > 0) { return true; } else { return false; } } /// <summary> /// 添加用戶 /// </summary> /// <param name="name"></param> /// <param name="pwd"></param> public int InsertUser(string name, string pwd) { UserInfoModel userinfomodel = new UserInfoModel(); UserInfoDAL userinfodal = new UserInfoDAL(); userinfomodel.Name = name; userinfomodel.Pwd = pwd; if (CheckUserName(name) == true) { return -1; } else { return userinfodal.MySqlInsertUser(userinfomodel); } } /// <summary> /// 更新用戶密碼 /// </summary> /// <param name="_userInfoModel"></param> /// <returns></returns> public bool UpdateUserPwd(string name,string pwd) { UserInfoModel userinfomodel = new UserInfoModel(); UserInfoDAL userinfodal = new UserInfoDAL(); userinfomodel.Name = name; userinfomodel.Pwd = pwd; if (userinfodal.MySqlUpdateUserPwd(userinfomodel) > 0) { return true; } else { return false; } } } }
代碼已上傳至CSDN,鏈接如下:
https://download.csdn.net/download/qq_28091109/11292751
我是半路出家的外行,這也只是我個人學習記錄,大佬勿噴