【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

相关文章

Spring Security 单点登录与自动登录机制的实现原理

《SpringSecurity单点登录与自动登录机制的实现原理》本文探讨SpringSecurity实现单点登录(SSO)与自动登录机制,涵盖JWT跨系统认证、RememberMe持久化Token... 目录一、核心概念解析1.1 单点登录(SSO)1.2 自动登录(Remember Me)二、代码分析三、

C#中lock关键字的使用小结

《C#中lock关键字的使用小结》在C#中,lock关键字用于确保当一个线程位于给定实例的代码块中时,其他线程无法访问同一实例的该代码块,下面就来介绍一下lock关键字的使用... 目录使用方式工作原理注意事项示例代码为什么不能lock值类型在C#中,lock关键字用于确保当一个线程位于给定实例的代码块中时

C# $字符串插值的使用

《C#$字符串插值的使用》本文介绍了C#中的字符串插值功能,详细介绍了使用$符号的实现方式,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习吧... 目录$ 字符使用方式创建内插字符串包含不同的数据类型控制内插表达式的格式控制内插表达式的对齐方式内插表达式中使用转义序列内插表达式中使用

C#中的Converter的具体应用

《C#中的Converter的具体应用》C#中的Converter提供了一种灵活的类型转换机制,本文详细介绍了Converter的基本概念、使用场景,具有一定的参考价值,感兴趣的可以了解一下... 目录Converter的基本概念1. Converter委托2. 使用场景布尔型转换示例示例1:简单的字符串到

C#监听txt文档获取新数据方式

《C#监听txt文档获取新数据方式》文章介绍通过监听txt文件获取最新数据,并实现开机自启动、禁用窗口关闭按钮、阻止Ctrl+C中断及防止程序退出等功能,代码整合于主函数中,供参考学习... 目录前言一、监听txt文档增加数据二、其他功能1. 设置开机自启动2. 禁止控制台窗口关闭按钮3. 阻止Ctrl +

C#解析JSON数据全攻略指南

《C#解析JSON数据全攻略指南》这篇文章主要为大家详细介绍了使用C#解析JSON数据全攻略指南,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、为什么jsON是C#开发必修课?二、四步搞定网络JSON数据1. 获取数据 - HttpClient最佳实践2. 动态解析 - 快速

Ubuntu 24.04启用root图形登录的操作流程

《Ubuntu24.04启用root图形登录的操作流程》Ubuntu默认禁用root账户的图形与SSH登录,这是为了安全,但在某些场景你可能需要直接用root登录GNOME桌面,本文以Ubuntu2... 目录一、前言二、准备工作三、设置 root 密码四、启用图形界面 root 登录1. 修改 GDM 配

nginx 负载均衡配置及如何解决重复登录问题

《nginx负载均衡配置及如何解决重复登录问题》文章详解Nginx源码安装与Docker部署,介绍四层/七层代理区别及负载均衡策略,通过ip_hash解决重复登录问题,对nginx负载均衡配置及如何... 目录一:源码安装:1.配置编译参数2.编译3.编译安装 二,四层代理和七层代理区别1.二者混合使用举例

C#连接SQL server数据库命令的基本步骤

《C#连接SQLserver数据库命令的基本步骤》文章讲解了连接SQLServer数据库的步骤,包括引入命名空间、构建连接字符串、使用SqlConnection和SqlCommand执行SQL操作,... 目录建议配合使用:如何下载和安装SQL server数据库-CSDN博客1. 引入必要的命名空间2.

C#读写文本文件的多种方式详解

《C#读写文本文件的多种方式详解》这篇文章主要为大家详细介绍了C#中各种常用的文件读写方式,包括文本文件,二进制文件、CSV文件、JSON文件等,有需要的小伙伴可以参考一下... 目录一、文本文件读写1. 使用 File 类的静态方法2. 使用 StreamReader 和 StreamWriter二、二进