• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

C#三层架构之系统的登录验证与添加数据的实现

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

利用三层架构体系,实现学生管理系统中用户的登录与添加班级信息的功能,一下代码为具体实现步骤的拆分过程:

一、用户登录界面功能的实现

1、在数据访问层(LoginDAL)进行对数据库中数据的访问操作

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Threading.Tasks;
 6 //引入命名空间
 7 using System.Data;
 8 using System.Data.SqlClient;
 9 
10 namespace StudentMisDAL
11 {
12     public class LoginDAL
13     {
14         /// <summary>
15         /// 创建返回值类型为DataSet的有参构造函数
16         /// </summary>
17         /// <param name="name"></param>
18         /// <param name="pwd"></param>
19         /// <returns></returns>
20         public DataSet DoLogin(string name,string pwd)
21         {
22             string connstring = "server=.;database=StudentMISDB;uid=sa;pwd=123456";
23             SqlConnection conn = new SqlConnection(connstring);
24             //执行参数化的sql查询语句
25             string sql = @"select * from Login where LoginName=@LoginName and pwd=@pwd";
26             SqlCommand cmd = new SqlCommand(sql, conn);
27             //定义参数
28             SqlParameter[] parameter = new SqlParameter[]{
29                 new SqlParameter("@LoginName",SqlDbType.VarChar,32),
30                 new SqlParameter("@pwd",SqlDbType.VarChar,16)
31             };
32             //给参数赋值
33             parameter[0].Value = name;
34             parameter[1].Value = pwd;
35             //将参数添加到命令对象中
36             cmd.Parameters.AddRange(parameter);
37             //创建适配器
38             SqlDataAdapter da = new SqlDataAdapter(cmd);
39             //创建缓冲区
40             DataSet ds = new DataSet();
41             conn.Open();
42             da.Fill(ds);
43             conn.Close();
44             //返回ds
45             return ds;
46         }
47     }
48 }
View Code

 2、在业务逻辑层(LoginBLL)对数据访问层中获取到的数据进行逻辑判断分析

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Threading.Tasks;
 6 //引入命名空间
 7 using System.Data;
 8 using StudentMisDAL;
 9 
10 namespace StudentMisBLL
11 {
12     public class LoginBLL
13     {
14         /// <summary>
15         /// 创建一个返回值类型为bool型的有参构造函数
16         /// </summary>
17         /// <param name="name"></param>
18         /// <param name="pwd"></param>
19         /// <returns></returns>
20         public bool GetMisUI(string name,string pwd){
21             //实例化类LoginDAL(数据访问层)
22             LoginDAL ld = new LoginDAL();
23             //调用方法并接收返回值
24             DataSet ds=ld.DoLogin(name,pwd);
25             //根据返回值:受影响的行数,来进行判断
26             if (ds.Tables[0].Rows.Count<1)
27             {
28                 return false;
29             }
30             //防SQL注入
31             //获取到数据库中对应的第一张表中的第一行(也可以传入下标值)的列名叫做LoginName和pwd的值
32             string Name = ds.Tables[0].Rows[0]["LoginName"].ToString();
33             string PWD = ds.Tables[0].Rows[0]["pwd"].ToString();
34             if (name==Name&&pwd==PWD)
35             {
36                 return true;
37             }
38             return false;
39         }
40     }
41 }
View Code

3、在表示层(LoginUI)对业务逻辑层(LoginBLL)中的分析与判断进行调用和可视化

 1 using System;
 2 using System.Collections.Generic;
 3 using System.ComponentModel;
 4 using System.Data;
 5 using System.Drawing;
 6 using System.Linq;
 7 using System.Text;
 8 using System.Threading.Tasks;
 9 using System.Windows.Forms;
10 //引入命名空间
11 using StudentMisBLL;
12 
13 namespace StudentMisUI
14 {
15     public partial class LoginUI : Form
16     {
17         public LoginUI()
18         {
19             InitializeComponent();
20         }
21         /// <summary>
22         /// 为登录按钮添加点击事件
23         /// </summary>
24         /// <param name="sender"></param>
25         /// <param name="e"></param>
26         private void button1_Click(object sender, EventArgs e)
27         {
28             //获取到文本框中输入的值
29             string name = this.txtLoginName.Text.Trim();
30             string pwd = this.txtPwd.Text.Trim();
31             //将LoginBLL类(逻辑层)进行实例化
32             LoginBLL lb = new LoginBLL();
33             //调用方法
34             bool bo=lb.GetMisUI(name,pwd);
35             if (bo==true)
36             {
37                 MessageBox.Show("登陆成功!");
38                 //跳转至主窗体
39                 FrmMainUI frmMain = new FrmMainUI();
40                 frmMain.Show();
41                 this.Hide();
42             }
43             else
44             {
45                 MessageBox.Show("登陆失败,登录名或密码错误!");
46                 //清空输入框
47                 this.txtLoginName.Text = "";
48                 this.txtPwd.Text = "";
49             }
50         }
51     }
52 }
View Code

二、添加班级信息功能的实现

1、在表示层(LoginUI)中进行操作:将LoginUI窗体进行隐藏,将主窗体(FrmMainUI)进行展示

代码如下:

 1 if (bo==true)
 2             {
 3                 MessageBox.Show("登陆成功!");
 4                 //跳转至主窗体
 5                 FrmMainUI frmMain = new FrmMainUI();
 6                 frmMain.Show();
 7                 this.Hide();
 8             }
 9             else
10             {
11                 MessageBox.Show("登陆失败,登录名或密码错误!");
12                 //清空输入框
13                 this.txtLoginName.Text = "";
14                 this.txtPwd.Text = "";
15             }

2、在表示层(StudentMisUI)创建主窗体(FrmMainUI)

3、位子菜单的“添加班级”菜单创建一个窗体

5、为“添加”按钮添加点击事件

 1 using System;
 2 using System.Collections.Generic;
 3 using System.ComponentModel;
 4 using System.Data;
 5 using System.Drawing;
 6 using System.Linq;
 7 using System.Text;
 8 using System.Threading.Tasks;
 9 using System.Windows.Forms;
10 //引入命名空间
11 using StudentMisModel;
12 using StudentMisBLL;
13 
14 namespace StudentMisUI
15 {
16     public partial class FrmAddClassesUI : Form
17     {
18         public FrmAddClassesUI()
19         {
20             InitializeComponent();
21         }
22         /// <summary>
23         /// 为‘添加班级’窗体中的‘添加按钮’添加点击事件
24         /// </summary>
25         /// <param name="sender"></param>
26         /// <param name="e"></param>
27         private void btnAdd_Click(object sender, EventArgs e)
28         {
29             //实例化‘添加班机’实体类
30             ClassesMod classes = new ClassesMod();
31             //给实体类赋值
32             classes.ClassesNo = this.txtClassesNo.Text.Trim();
33             classes.ByName = this.txtByName.Text.Trim();
34             classes.Name = this.txtClassesName.Text.Trim();
35             //实例化ClassesBLL类(逻辑层)
36             ClassesBLL cb = new ClassesBLL();
37             bool bo = cb.AddClassesInfor(classes);
38             if (bo==true)
39             {
40                 MessageBox.Show("添加成功!");
41                 //添加成功后清空输入框
42                 this.txtClassesNo.Text = "";
43                 this.txtByName.Text = "";
44                 this.txtClassesName.Text = "";
45             }
46             else
47             {
48                 MessageBox.Show("添加失败!");
49             }
50         }
51 
52        
53     }
54 }
View Code

4、为该系统结构添加实体类(ClassesMod)(序号顺序写反了,但是没有写错)

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Threading.Tasks;
 6 
 7 namespace StudentMisModel
 8 {
 9     /// <summary>
10     /// 为‘添加班级’创建实体类
11     /// </summary>
12     public class ClassesMod
13     {
14         //创建班级ID属性
15         public int ClassId { get; set; }  
16         //创建班级名称属性
17         public string Name { get; set; }
18         //创建班级别名属性
19         public string ByName { get; set; }
20         //创建班级编号属性
21         public string ClassesNo { get; set; }
22     }
23 }

6、在数据访问层(ClassesDAL)进行数据访问

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Threading.Tasks;
 6 //引入命名空间
 7 using StudentMisModel;
 8 using System.Data;
 9 using System.Data.SqlClient;
10 
11 namespace StudentMisDAL
12 {
13     public class ClassesDAL
14     {
15         public int AddClasses(ClassesMod classes)
16         {
17             //建立连接数据库的字符串
18             string connString = "server=.;database=StudentMISDB;uid=sa;pwd=123456";
19             //创建连接对象
20             SqlConnection conn = new SqlConnection(connString);
21             //参数化的查询语句
22             string sql = "insert into Classes Values(@Name,@ByName,@ClassesNo)";
23             //执行查询命令
24             SqlCommand cmd = new SqlCommand(sql,conn);
25             //定义参数
26             SqlParameter[] parameters = new SqlParameter[]{
27                 new SqlParameter("@Name",SqlDbType.NVarChar,16),
28                 new SqlParameter("@ByName",SqlDbType.NVarChar,32),
29                 new SqlParameter("@ClassesNo",SqlDbType.VarChar,16)
30             };
31             //给参数赋值
32             parameters[0].Value = classes.Name;
33             parameters[1].Value = classes.ByName;
34             parameters[2].Value = classes.ClassesNo;
35             //将参数添加到命令对象
36             cmd.Parameters.AddRange(parameters);
37             conn.Open();
38             //返回插入后影响的行数
39             int i = cmd.ExecuteNonQuery();
40             conn.Close();
41             //返回行数
42             return i;
43         }
44     }
45 }
View Code

7、在业务逻辑层(ClassesBLL)进行逻辑判断分析

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Threading.Tasks;
 6 //引入命名空间
 7 using StudentMisDAL;
 8 using StudentMisModel;
 9 
10 namespace StudentMisBLL
11 {
12     public class ClassesBLL
13     {
14         public bool AddClassesInfor(ClassesMod classes)
15         {
16             //实例化ClassesDAL类(数据访问层)
17             ClassesDAL cd = new ClassesDAL();
18             //调用类中的方法并接受
19             int i = cd.AddClasses(classes);
20             //返回一个布尔值
21             return i > 0;      
22         }
23     }
24 }
View Code

8、再次回到表示层(FrmAddClassesUI)。将业务逻辑层中的方法和分析进行调用,并在表示层进行可视化

 1 using System;
 2 using System.Collections.Generic;
 3 using System.ComponentModel;
 4 using System.Data;
 5 using System.Drawing;
 6 using System.Linq;
 7 using System.Text;
 8 using System.Threading.Tasks;
 9 using System.Windows.Forms;
10 //引入命名空间
11 using StudentMisModel;
12 using StudentMisBLL;
13 
14 namespace StudentMisUI
15 {
16     public partial class FrmAddClassesUI : Form
17     {
18         public FrmAddClassesUI()
19         {
20             InitializeComponent();
21         }
22         /// <summary>
23         /// 为‘添加班级’窗体中的‘添加按钮’添加点击事件
24         /// </summary>
25         /// <param name="sender"></param>
26         /// <param name="e"></param>
27         private void btnAdd_Click(object sender, EventArgs e)
28         {
29             //实例化‘添加班机’实体类
30             ClassesMod classes = new ClassesMod();
31             //给实体类赋值
32             classes.ClassesNo = this.txtClassesNo.Text.Trim();
33             classes.ByName = this.txtByName.Text.Trim();
34             classes.Name = this.txtClassesName.Text.Trim();
35             //实例化ClassesBLL类(逻辑层)
36             ClassesBLL cb = new ClassesBLL();
37             bool bo = cb.AddClassesInfor(classes);
38             if (bo==true)
39             {
40                 MessageBox.Show("添加成功!");
41                 //添加成功后清空输入框
42                 this.txtClassesNo.Text = "";
43                 this.txtByName.Text = "";
44                 this.txtClassesName.Text = "";
45             }
46             else
47             {
48                 MessageBox.Show("添加失败!");
49             }
50         }
51 
52        
53     }
54 }
View Code

9、实现点击“添加”按钮后让子窗体(FrmAddClassesUI)在父窗体(FrmMainUI)中进行显示。

 1 using System;
 2 using System.Collections.Generic;
 3 using System.ComponentModel;
 4 using System.Data;
 
                       
                    
                    

鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
c#dappermysqllike参数化发布时间:2022-07-14
下一篇:
C#动态加载DLL,通过配置文件实现对程序集的即插即用发布时间:2022-07-14
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap