本人为一小白菜鸟,在不断学习的过程中将自己学习所得的经验分享给大家。
今天为大家介绍的是一个小实现,一个三层架构的小实现,关于登陆界面用户名输入与注册与数据库的连接和匹配功能。
首先,简单介绍一下三层架构。看到很多同学和共同学习的朋友对数据库很是头疼,为什么?因为数据库感觉很复杂和麻烦,每实现一个增删改查的功能就要重复的连接和调用数据库,而三层架构则很轻松的解决了这个问题。
分为三个层次,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("用户重复,请重新输入!");
}
下面为调试过程,剩下的管理员权限和实现对用户的增删改查可以作为接下来的学习。
登陆失败
注册成功
注册失败
登陆成功并且进入管理员界面查看用户信息