一個簡單的三層架構之用戶登陸和註冊在數據庫中的存儲
本人爲一小白菜鳥,在不斷學習的過程中將自己學習所得的經驗分享給大家。
今天爲大家介紹的是一個小實現,一個三層架構的小實現,關於登陸界面用戶名輸入與註冊與數據庫的連接和匹配功能。
首先,簡單介紹一下三層架構。看到很多同學和共同學習的朋友對數據庫很是頭疼,爲什麼?因爲數據庫感覺很複雜和麻煩,每實現一個增刪改查的功能就要重複的連接和調用數據庫,而三層架構則很輕鬆的解決了這個問題。
分爲三個層次,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("用戶重複,請重新輸入!");
}
下面爲調試過程,剩下的管理員權限和實現對用戶的增刪改查可以作爲接下來的學習。
登陸失敗
註冊成功
註冊失敗
登陸成功並且進入管理員界面查看用戶信息