七层登录总结(下)

简介: 七层登录总结(下)

添加命名空间

using System.Data.SqlClient;

using System.Data;

using System.Configuration;

同时在DAL层里边要手动添加上面的引用

不然就会出现confurgationManager找不到的情况发生,

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data;
using System.Data.SqlClient;
namespace DAL
{
    public class LoginDAL : IDAL.LoginIDAL
    {
        public DataTable selectUser(Entity.UserInfo UserInfo)
        {
            //实例化一个数据查询对象uu
            SqlHelper sqlHelper = new SqlHelper();
            //传参
            SqlParameter[] sqlParams = { new SqlParameter("@UserID", UserInfo.UserId), new SqlParameter("@PassWord", UserInfo.PassWord) };
            //数据库选择要查询的数据
            string sql = @"SELECT* FROM Users WHERE UserName = @UserID AND PassWord = @PassWord";
            //将参数放在语句中
            DataTable table = sqlHelper.ExecuteQuery(sql, sqlParams, CommandType.Text);
            return table;
        }
    }
}

Factory(工厂层)

:定义一个接口层,实现BLL层和DAL层之间的数据传递,工厂层用到了抽象工厂+反射+配置文件,实现了不同数据库之间的连接,反射+配置文件

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Configuration;
using System.Reflection;
namespace Factory
{
    public class LoginFactory
    {
        string StrDB = System.Configuration.ConfigurationManager.AppSettings["DB"];   //接收来自配置文件的数据
        public IDAL.LoginIDAL CreateUser()
        {
            string ClassName = StrDB + "." + "LoginDAL";//DAL层的类名
            return (IDAL.LoginIDAL)Assembly.Load(StrDB).CreateInstance(ClassName);//反射+工厂的应用
        }
    }
}

BLL层:

执行特定的业务逻辑。

登陆界面BLL层:1.对D层返回来的信息进行判断,用户是否存在的问题,2.如果存在还会产生,返回更加具体的信息给U层

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data;
namespace BLL
{
    public class LoginBLL
    {
        public bool UserBLL(Entity.UserInfo UserInfo)
        {
            Factory.LoginFactory fact = new Factory.LoginFactory();  //实例化工厂
            IDAL.LoginIDAL idal = fact.CreateUser();    //调用工厂方法创建接口
            DataTable table = idal.selectUser(UserInfo);   //接收D层的返回值
            bool flag;
            if (table.Rows.Count == 0)
            {
                flag = false;
            }
            else
            {
                flag = true;
            }
            return flag;
        }
    }
}

Facade层,

提供一个门面,一个UI层可访问多个BLL层,提供一个外观层,好比提供了一个简单的入口,降低UI层和BLL层之间的耦合度。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Facade
{
    public class LoginFacade
    {
       public Boolean SelectUser(Entity.UserInfo user)
        {
            bool flag;
            BLL.LoginBLL userBLL = new BLL.LoginBLL();    //实例化一个b层的对象
            flag = userBLL.UserBLL(user);                           //接收B层传过来的信号
            return flag;
        }
    }
}

UI层:

1、提供一个登陆界面,获取用户输入的信息

2、给用户提供特定的业务功能

LoginUI

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace UI
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        public void btnLogin_Click(object sender, EventArgs e)
        {
            if (txtUserID.Text.Trim() == "")
            {
                MessageBox.Show("用户名不能为空,请输入用户名", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
            if (txtPassword.Text == "")
            {
                MessageBox.Show("密码不能为空,请输入密码", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
            //try
            //{
            Entity.UserInfo user = new Entity.UserInfo();
            user.UserId = Convert.ToInt32(txtUserID.Text.Trim());
            user.PassWord = txtPassword.Text;
            Boolean flag = false;
            Facade.LoginFacade FLogin = new Facade.LoginFacade(); //实例化外观
            flag = FLogin.SelectUser(user);//调用外观方法,返回给user
            if (flag != false)
            {
                MessageBox.Show("登录成功");
                this.Hide();//隐藏当前窗体
                MessageBox.Show("登录成功", "恭喜", MessageBoxButtons.OK);
            }
            else
            {
                MessageBox.Show("密码或用户名错误");
            }
            //}
            //catch (Exception)
            //{
            //    throw;
            //}
        }
        private void Form1_Load(object sender, EventArgs e)
        {
        }
        private void butCancel_Click_1(object sender, EventArgs e)
        {
            System.Environment.Exit(0);//这是最彻底的退出方式,不管什么线程都能被强制退出
            //this.Close();//只是关闭当前窗口,若不是主窗体的话,是无法退出程序的,另外,若有托管线程(非主线程),也无法干净退出
            //Application.Exit();//强制所有消息终止,退出所有的窗体,但是若有托管线程(非主线程),也是无法干净退出的;
            //Application.ExitThread();//强制终止调用线程上的所有消息,同样面临其他线程无法正确退出的难题
        }
        private void butCancel_Click(object sender, EventArgs e)
        {
        }
    }
}

配置文件

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1" />
    </startup>
   <appSettings>
     <add key ="DB" value ="DAL"/>
     <add key ="strConn" value ="server =ZGY;Database= Login;User ID = sa; Password = 123456"/>
     </appSettings>  
</configuration>

这中间也遇见很多问题,大家可以去看这一系列的文章,一定有你遇见的那个错误呦!

System.NullReferenceException:“未将对象引用设置到对象的实例。” System.Configuration.ConnectionStringSettingsCollect

配置系统未能初始化

System.IO.FileNotFoundException:“未能加载文件或程序集“loginDAL”或它的某一个依赖项。系统找不到指定的文件。”

源文件与模块生成时的文件不同,是否希望调试器使用它?如何解决

System.ArgumentNullException:“值不能为 null。 Arg_ParamName_Name”

一定要先好好学习配置文件的写法奥!

相关文章
|
23天前
|
负载均衡 网络协议 应用服务中间件
SLB四层转发和七层转发
SLB四层转发和七层转发详细介绍
224 0
|
11月前
|
SQL 数据库
七层登录
七层登录
28 0
|
11月前
|
SQL 数据库
七层登录总结(上)
七层登录总结(上)
|
11月前
|
设计模式 数据库连接
|
存储 监控 安全
七层强大网络安全策略
七层强大网络安全策略
|
弹性计算 负载均衡 网络协议
第二讲配套实验-访问四层&七层CLB场景对比|学习笔记
快速学习第二讲配套实验-访问四层&七层CLB场景对比。
428 0
第二讲配套实验-访问四层&七层CLB场景对比|学习笔记
|
负载均衡 算法 网络协议
图解网络:什么是网关负载均衡协议GLBP?
GLBP 是 Cisco 专有协议,是第一跳冗余协议 (FHRP) 之一,与 HSRP 和 VRRP 不同,它允许流量在多个路由器之间进行负载平衡。
387 0
图解网络:什么是网关负载均衡协议GLBP?
|
运维 Cloud Native 安全
网关V.S反向代理(上)
网关V.S反向代理
231 0
网关V.S反向代理(上)
|
负载均衡 API 网络安全
网关V.S反向代理(下)
网关V.S反向代理
192 0
网关V.S反向代理(下)
|
负载均衡 应用服务中间件
四层负载均衡转发模式
负载均衡又分为四层负载均衡和七层负载均衡。四层负载均衡工作在OSI模型的传输层,主要工作是转发,它在接收到客户端的流量以后通过修改数据包的地址信息将流量转发到应用服务器。
1319 0

热门文章

最新文章