【C#】实战篇-C#版登录

2024-08-26 02:32
文章标签 c# 登录 .net netcore 实战篇

本文主要是介绍【C#】实战篇-C#版登录,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

        三层只是分层的一种经典形式,具体分几层,分情况而定。在学习阶段,我们一般用三层架构,分别是UI层、BLL层、DAL层,另外我们常用一个Model来封装我们需要的数据;在开发阶段,会有四层到七层。下面用一个小实例更深层次的理解三层。

一、各层的调用关系


二、构建三层框架并添加相应的引用

三、数据库设计


四、代码实现

【UI层】

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.SqlClient;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;namespace LoginUI
{public partial class Form1 : Form{public Form1(){InitializeComponent();//初始化}private void btnLogin_Click(object sender, EventArgs e){//获取数据string userName = txtUserName.Text.Trim();string password = txtPassword.Text;Login.BLL.LoginManager mgr = new Login.BLL.LoginManager();//定义一个业务逻辑类Login .Model .UserInfo user= mgr.UserLogin(userName, password);MessageBox.Show("登录用户:" + user.UserName);}private void btnNo_Click(object sender, EventArgs e){Application.Exit();}}
}
【BLL层】-LoginManager

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace Login.BLL
{public class LoginManager{public Login.Model .UserInfo  UserLogin(string userName,string password)//返回UserInfo{Login.DAL.UserDAO uDao = new Login.DAL.UserDAO();//呼叫数据源Login.Model.UserInfo user= uDao.SelectUser(userName, password);//查询并返回user(包括用户名和密码)//判断用户名和密码if (user!=null )//登录成功{Login.DAL.ScoreDAO sDao = new Login.DAL.ScoreDAO();sDao.UpdateScore(userName, 10);//更新Score表return user;}else{throw new Exception("登录失败");}}}
}
【DAL层】-UserDAO

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data;
using System.Data.SqlClient;namespace Login.DAL
{public class UserDAO//验证用户名和密码的业务{public Login .Model .UserInfo  SelectUser(string userName,string password){using ( SqlConnection conn=new SqlConnection (DbUtil .ConnString )){//执行SQL语句进行查询SqlCommand cmd = conn.CreateCommand();cmd.CommandText = @"SELECT ID,UserName,Password,Email FROM USERS WHERE UserName=@UserName AND PassWord =@PassWord";//添加两个参数cmd.Parameters.Add(new SqlParameter("@UserName", userName));cmd.Parameters.Add(new SqlParameter("@Password", password));//输出查询结果cmd.CommandType = CommandType.Text;conn.Open();SqlDataReader reader = cmd.ExecuteReader();Login.Model.UserInfo user = null;//读取具体的数据while(reader.Read ()){if(user==null){user = new Login.Model.UserInfo();}//读取查询到的数据user.ID = reader.GetInt32(0);user.UserName = reader.GetString(1);user.Password = reader.GetString(2);if(!reader .IsDBNull (3)){user.Email = reader.GetString(3);}}return user;}}}
}

【DAL层】-ScoreDAO

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data;
using System.Data.SqlClient;namespace Login.DAL
{public  class ScoreDAO{public void UpdateScore(string userName,int value){using (SqlConnection conn=new SqlConnection (DbUtil .ConnString )){SqlCommand cmd = conn.CreateCommand();      //实例化命令对象cmd.CommandText = @"INSERT INTO SCORES(UserName,Score) Values (@UserName,@Score)";//给命令对象添加参数cmd.Parameters.Add(new SqlParameter("@UserName", userName));cmd.Parameters.Add(new SqlParameter("@Score", value));conn.Open();             cmd.ExecuteNonQuery();      //返回受影响的行数。}}}
}

【DAL层】-Dbutil

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace Login.DAL
{class DbUtil{//建立数据库本地连接public static string ConnString = @"Server=咩咩;Database=Login;User ID=sa;Password=123456";}
}

【Model层】-UserInfo

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace Login.Model
{//封装数据,供三层调用;更偏向业务逻辑层public class UserInfo{//定义用户的属性public int ID { get; set; }public string UserName { get; set; }public string Password { get; set; }public string Email { get; set; }}
}
五、运行效果

六、小结

   通过小例子更深的理解了三层。UI层负责用户和系统的交互,DAL负责数据库的增删改查操作,其他的逻辑属于BLL层,实体层用于传递数据。三层分工明确,降低了依赖。

这篇关于【C#】实战篇-C#版登录的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1107295

相关文章

C#使用SQLite进行大数据量高效处理的代码示例

《C#使用SQLite进行大数据量高效处理的代码示例》在软件开发中,高效处理大数据量是一个常见且具有挑战性的任务,SQLite因其零配置、嵌入式、跨平台的特性,成为许多开发者的首选数据库,本文将深入探... 目录前言准备工作数据实体核心技术批量插入:从乌龟到猎豹的蜕变分页查询:加载百万数据异步处理:拒绝界面

C#数据结构之字符串(string)详解

《C#数据结构之字符串(string)详解》:本文主要介绍C#数据结构之字符串(string),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录转义字符序列字符串的创建字符串的声明null字符串与空字符串重复单字符字符串的构造字符串的属性和常用方法属性常用方法总结摘

C#如何动态创建Label,及动态label事件

《C#如何动态创建Label,及动态label事件》:本文主要介绍C#如何动态创建Label,及动态label事件,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录C#如何动态创建Label,及动态label事件第一点:switch中的生成我们的label事件接着,

C# WinForms存储过程操作数据库的实例讲解

《C#WinForms存储过程操作数据库的实例讲解》:本文主要介绍C#WinForms存储过程操作数据库的实例,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、存储过程基础二、C# 调用流程1. 数据库连接配置2. 执行存储过程(增删改)3. 查询数据三、事务处

springboot security验证码的登录实例

《springbootsecurity验证码的登录实例》:本文主要介绍springbootsecurity验证码的登录实例,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,... 目录前言代码示例引入依赖定义验证码生成器定义获取验证码及认证接口测试获取验证码登录总结前言在spring

C#基础之委托详解(Delegate)

《C#基础之委托详解(Delegate)》:本文主要介绍C#基础之委托(Delegate),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1. 委托定义2. 委托实例化3. 多播委托(Multicast Delegates)4. 委托的用途事件处理回调函数LINQ

在C#中调用Python代码的两种实现方式

《在C#中调用Python代码的两种实现方式》:本文主要介绍在C#中调用Python代码的两种实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录C#调用python代码的方式1. 使用 Python.NET2. 使用外部进程调用 Python 脚本总结C#调

C#中的 StreamReader/StreamWriter 使用示例详解

《C#中的StreamReader/StreamWriter使用示例详解》在C#开发中,StreamReader和StreamWriter是处理文本文件的核心类,属于System.IO命名空间,本... 目录前言一、什么是 StreamReader 和 StreamWriter?1. 定义2. 特点3. 用

最新Spring Security实战教程之表单登录定制到处理逻辑的深度改造(最新推荐)

《最新SpringSecurity实战教程之表单登录定制到处理逻辑的深度改造(最新推荐)》本章节介绍了如何通过SpringSecurity实现从配置自定义登录页面、表单登录处理逻辑的配置,并简单模拟... 目录前言改造准备开始登录页改造自定义用户名密码登陆成功失败跳转问题自定义登出前后端分离适配方案结语前言

如何使用C#串口通讯实现数据的发送和接收

《如何使用C#串口通讯实现数据的发送和接收》本文详细介绍了如何使用C#实现基于串口通讯的数据发送和接收,通过SerialPort类,我们可以轻松实现串口通讯,并结合事件机制实现数据的传递和处理,感兴趣... 目录1. 概述2. 关键技术点2.1 SerialPort类2.2 异步接收数据2.3 数据解析2.