【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#中的StringSplitOptions枚举

《一文解析C#中的StringSplitOptions枚举》StringSplitOptions是C#中的一个枚举类型,用于控制string.Split()方法分割字符串时的行为,核心作用是处理分割后... 目录C#的StringSplitOptions枚举1.StringSplitOptions枚举的常用

C#自动化实现检测并删除PDF文件中的空白页面

《C#自动化实现检测并删除PDF文件中的空白页面》PDF文档在日常工作和生活中扮演着重要的角色,本文将深入探讨如何使用C#编程语言,结合强大的PDF处理库,自动化地检测并删除PDF文件中的空白页面,感... 目录理解PDF空白页的定义与挑战引入Spire.PDF for .NET库核心实现:检测并删除空白页

C#利用Free Spire.XLS for .NET复制Excel工作表

《C#利用FreeSpire.XLSfor.NET复制Excel工作表》在日常的.NET开发中,我们经常需要操作Excel文件,本文将详细介绍C#如何使用FreeSpire.XLSfor.NET... 目录1. 环境准备2. 核心功能3. android示例代码3.1 在同一工作簿内复制工作表3.2 在不同

C#中通过Response.Headers设置自定义参数的代码示例

《C#中通过Response.Headers设置自定义参数的代码示例》:本文主要介绍C#中通过Response.Headers设置自定义响应头的方法,涵盖基础添加、安全校验、生产实践及调试技巧,强... 目录一、基础设置方法1. 直接添加自定义头2. 批量设置模式二、高级配置技巧1. 安全校验机制2. 类型

C#使用iText获取PDF的trailer数据的代码示例

《C#使用iText获取PDF的trailer数据的代码示例》开发程序debug的时候,看到了PDF有个trailer数据,挺有意思,于是考虑用代码把它读出来,那么就用到我们常用的iText框架了,所... 目录引言iText 核心概念C# 代码示例步骤 1: 确保已安装 iText步骤 2: C# 代码程

90%的人第一步就错了! 顺利登录wifi路由器后台的技巧

《90%的人第一步就错了!顺利登录wifi路由器后台的技巧》登录Wi-Fi路由器,其实就是进入它的后台管理页面,很多朋友不知道该怎么进入路由器后台设置,感兴趣的朋友可以花3分钟了解一下... 你是不是也遇到过这种情况:家里网速突然变慢、想改WiFi密码却不知道从哪进路由器、新装宽带后完全不知道怎么设置?别慌

C#实现高性能拍照与水印添加功能完整方案

《C#实现高性能拍照与水印添加功能完整方案》在工业检测、质量追溯等应用场景中,经常需要对产品进行拍照并添加相关信息水印,本文将详细介绍如何使用C#实现一个高性能的拍照和水印添加功能,包含完整的代码实现... 目录1. 概述2. 功能架构设计3. 核心代码实现python3.1 主拍照方法3.2 安全HBIT

C#实现SHP文件读取与地图显示的完整教程

《C#实现SHP文件读取与地图显示的完整教程》在地理信息系统(GIS)开发中,SHP文件是一种常见的矢量数据格式,本文将详细介绍如何使用C#读取SHP文件并实现地图显示功能,包括坐标转换、图形渲染、平... 目录概述功能特点核心代码解析1. 文件读取与初始化2. 坐标转换3. 图形绘制4. 地图交互功能缩放

C#使用SendMessage实现进程间通信的示例代码

《C#使用SendMessage实现进程间通信的示例代码》在软件开发中,进程间通信(IPC)是关键技术之一,C#通过调用WindowsAPI的SendMessage函数实现这一功能,本文将通过实例介绍... 目录第一章:SendMessage的底层原理揭秘第二章:构建跨进程通信桥梁2.1 定义通信协议2.2

C#实现千万数据秒级导入的代码

《C#实现千万数据秒级导入的代码》在实际开发中excel导入很常见,现代社会中很容易遇到大数据处理业务,所以本文我就给大家分享一下千万数据秒级导入怎么实现,文中有详细的代码示例供大家参考,需要的朋友可... 目录前言一、数据存储二、处理逻辑优化前代码处理逻辑优化后的代码总结前言在实际开发中excel导入很