自学内容网 自学内容网

ASP.NET第七章 --案例2

接下来我们来写三层架构

三层架构:

1. 表现层(Presentation Layer):
技术选择:ASP.NET MVC、ASP.NET Core MVC、Blazor等。
作用:负责用户界面的呈现和用户交互。在这一层,用户可以与系统进行交互,发出请求并接收响应。表现层通常包括视图(View)和控制器(Controller),负责接收用户输入并调用适当的服务层方法。

2. 业务逻辑层(Business Logic Layer):
技术选择:通常是C#类库(Class Libraries)或者专用的服务层项目。
作用:处理业务逻辑和规则。这一层包括应用程序的业务逻辑,例如订单处理、支付逻辑、权限控制等。业务逻辑层接收来自表现层的请求,协调各种操作,并调用数据访问层来检索或保存数据。

3. 数据访问层(Data Access Layer):
技术选择:通常使用Entity Framework、ADO.NET等技术。
作用:负责与数据存储(通常是数据库)交互。数据访问层处理与数据的交互,包括从数据库中检索数据、向数据库中写入新数据或更新现有数据等操作。这一层将数据库查询和更新功能封装起来,使得业务逻辑层不需要直接处理数据库细节。

配置三层架构

4.打开vs

5.新建项目 SaleSys

6. 右键解决方案,添加,新建项目Model

7.给class1重命名为UserType

8.

 /// <summary>

    /// 实体类:用户类型

    /// </summary>

    public class UserType

    {

        // 类型Id

        public int Id { get; set; }



        // 类型

        public string TypeName { get; set; }

    }

9. 添加,新建项Users

10.

/// <summary>

    /// 实体类:用户

    /// </summary>

    public class Users

    {

        // Id, Name, Sex, Address, Phone, Mail, CardId, NickName, Pwd, State, TypeId

       

        // 用户Id

        public int Id { get; set; }

        // 用户姓名

        public string Name { get; set; }

        // 用户性别

        public bool Sex { get; set; }

        // 用户地址

        public string Address { get; set; }

        // 用户电话

        public string Phone { get; set; }

        // 用户邮箱

        public string Mail { get; set; }

        // CardId

        public int CardId { get; set; }

        // NickName

        public string NickName { get; set; }

        // Pwd

        public string Pwd { get; set; }

        // State 当前状态

        public int State { get; set; }

        // 外键 TypeId

        public int TypeId { get; set; }

}

11.右键解决方案,添加,新建项目,新建类库SaleSysDAL

12. 给class1重命名为dbHelp

13.引包

using System.Data;

using System.Data.SqlClient;

14.

public class dbHelp

    {

        // 1.数据库连接字符串

        public static SqlConnection GetConnection()

        {

            SqlConnection conn = new SqlConnection("server=.;database=SqlQuery1;uid=sa;pwd=sa;");

            // 判断,数据库连接的状态,如果当前是关闭状态

            if (conn.State == ConnectionState.Closed)

            {

                conn.Open();

            }else if (conn.State == ConnectionState.Broken) // 中断状态

            {

                conn.Open();

            }else if (conn.State == ConnectionState.Open)   // 打开状态

            {

                conn.Close();

            }

            // 返回对象

            return conn;

        }

        // 2.执行单项数据库访问操作:insert into    /   update  /   delete

        public static int ExecutSql(string sql)

        {

            SqlCommand cmd = new SqlCommand(sql, GetConnection());

            return cmd.ExecuteNonQuery();

        }

        // 3.执行数据库读取操作,返回SqlDataReader容器

        public static SqlDataReader GetReader(string sql)

        {

            SqlCommand cmd = new SqlCommand(sql, GetConnection());

            return cmd.ExecuteReader();

        }

        // 4.执行数据读取操作,返回DataTable数据源

        public static DataTable GetTable(string sql)

        {

            SqlDataAdapter sda = new SqlDataAdapter(sql, GetConnection());

            DataTable dt = new DataTable();

            sda.Fill(dt);

            return dt;

        }

        // 5.执行数据查询操作

        public static object GetScalar(string sql)

        {

            SqlConnection conn = new SqlConnection("server=.;database=SqlQuery1;uid=sa;pwd=sa;");

            SqlCommand cmd = new SqlCommand(sql, GetConnection());

            return cmd.ExecuteScalar();

        }

}

15. 添加,新建类UsersDAL

16.右键引用,添加引用

17.在UsersDAL.cs中,引包

using Model;

using System.Data;

18.

public class UsersDAL

    {

        // 1.根据用户名查询用户信息

        public Users GetUsersByName(string name)

        {

            // 查询到当前用户名,并把值赋值在sql变量中

            string sql = "select * from Users where Name='"+ name +"'";

            // 获取当前用户名的用户信息

            DataTable dt = dbHelp.GetTable(sql);

            // 判断,当前数据表不等于空,并且数据表中的行数 > 0

            if (dt != null && dt.Rows.Count > 0)

            {

                // 获取当前用户信息的行集合(也就是有几个字段)

                DataRow dr = dt.Rows[0];

                // 获取当前用户的字段信息

                Users users = new Users()

                {

                    Id = Convert.ToInt32(dr["Id"]),

                    Name = dr["Name"].ToString(),

                    Sex = Convert.ToBoolean(dr["Sex"]),

                    Address = dr["Address"].ToString(),

                    Phone = dr["Phone"].ToString(),

                    Mail = dr["Mail"].ToString(),

                    CardId = Convert.ToInt32(dr["CardId"]),

                    NickName = dr["NickName"].ToString(),

                    Pwd = dr["Pwd"].ToString(),

                    State = Convert.ToInt32(dr["State"]),

                    TypeId = Convert.ToInt32(dr["TypeId"]),

                };

                return users;

            }

            return null;

        }

        // 2.根据Id查询用户信息

        public Users GetUsersById(int id)

        {

            // 查询到当前Id,并把值赋值在sql变量中

            string sql = "select * from Users where Id='" + id + "'";

            // 获取当前Id的用户信息

            DataTable dt = dbHelp.GetTable(sql);

            // 判断,当前数据表不等于空,并且数据表中的行数 > 0

            if (dt != null && dt.Rows.Count > 0)

            {

                // 获取当前用户信息的行集合(也就是有几个字段)

                DataRow dr = dt.Rows[0];

                // 获取当前用户的字段信息

                Users users = new Users()

                {

                    Id = Convert.ToInt32(dr["Id"]),

                    Name = dr["Name"].ToString(),

                    Sex = Convert.ToBoolean(dr["Sex"]),

                    Address = dr["Address"].ToString(),

                    Phone = dr["Phone"].ToString(),

                    Mail = dr["Mail"].ToString(),

                    CardId = Convert.ToInt32(dr["CardId"]),

                    NickName = dr["NickName"].ToString(),

                    Pwd = dr["Pwd"].ToString(),

                    State = Convert.ToInt32(dr["State"]),

                    TypeId = Convert.ToInt32(dr["TypeId"]),

                };

                return users;

            }

            return null;

        }

        // 3.根据Id删除用户信息

        public int DeleteById(int id)

        {

            string sql = "delete Users where Id=" + id;

            return dbHelp.ExecutSql(sql);

        }

        // 4.数据检索,根据用户名和密码判断用户是否存在

        public bool UsersExist(string userName, string userPwd)

        {

            string sql = "select * from Useers where Name='" + userName + "' and Pwd ='" + userPwd + "'";

            return Convert.ToInt32(dbHelp.GetScalar(sql)) > 0;

        }

        // ...还可以写很多

    }

19.右键解决方案,添加,新建项目,SaleSysUI

20.创建web窗体,Login

<div>

            <h3>欢迎来到销售管理系统,请先登录!</h3>

        </div>

        <div>

            <table>

                <%-- 第一行 --%>

                <tr>

                    <td>用户名:</td>

                    <td>

                        <asp:TextBox ID="txtName" runat="server"></asp:TextBox>

                    </td>

                </tr>

                <%-- 第二行 --%>

                <tr>

                    <td>密码:</td>

                    <td>

                        <asp:TextBox ID="txtPwd" runat="server"></asp:TextBox>

                    </td>

                </tr>

                <%-- 第三行 --%>

                <tr>

                    <td>

                        <asp:Button ID="Button1" runat="server" Text="登录" OnClick="Button1_Click" />

                    </td>

                </tr>

            </table>

        </div>

21.在UsersDAL里,继续写第五个方法

// 5.根据用户名和密码来查询用户信息数据

        public Users GetUsers(string userName,string userPwd)

        {

            // 查询到当前用户名和密码,与数据库中的用户名和密码相匹配,并把匹配到的值赋值在sql变量中

            string sql = "select * from Users where Name='" + userName + "' and Pwd='"+ userPwd +"'";

            // 获取当前Id的用户信息

            DataTable dt = dbHelp.GetTable(sql);

            // 判断,当前数据表不等于空,并且数据表中的行数 > 0

            if (dt != null && dt.Rows.Count > 0)

            {

                // 获取当前用户信息的行集合(也就是有几个字段)

                DataRow dr = dt.Rows[0];

                // 获取当前用户的字段信息

                Users users = new Users()

                {

                    Id = Convert.ToInt32(dr["Id"]),

                    Name = dr["Name"].ToString(),

                    Sex = Convert.ToBoolean(dr["Sex"]),

                    Address = dr["Address"].ToString(),

                    Phone = dr["Phone"].ToString(),

                    Mail = dr["Mail"].ToString(),

                    CardId = Convert.ToInt32(dr["CardId"]),

                    NickName = dr["NickName"].ToString(),

                    Pwd = dr["Pwd"].ToString(),

                    State = Convert.ToInt32(dr["State"]),

                    TypeId = Convert.ToInt32(dr["TypeId"]),

                };

                return users;

            }

            return null;

        }

22.在Login页面,双击登录按钮

// 登录的点击事件

        protected void Button1_Click(object sender, EventArgs e)

        {

            //1、获取用户名和密码控件的值

            string strName = txtName.Text;

            string strPwd = txtPwd.Text;

            //2、判断用户名和密码是否为空

        }

23.右键SaleSysUI,设置启动项目

24.

25. 右键解决方案,添加,新建项目,SaleSysBLL

26.右键BLL层里的引用,添加引用,把Model和DAL层引入进去

27.重命名class1.cs,改为UsersBLL.cs

28.在UsersBLL.cs里引包

// 引包

using SaleSysDAL;

using Model;

29.

/// <summary>

    /// 处理和用户相关的业务逻辑

    /// </summary>

    public class UsersBLL

    {

        // 1.实例化SaleSysDAL类库,实例化后才可以调用里面的方法

        UsersDAL dal = new UsersDAL();



        /// <summary>

        /// 2.处理用户登录的相关逻辑

        /// </summary>

        /// <param name="userName"></param>

        /// <param name="usrePwd"></param>

        /// <returns></returns>

        public bool Login(string userName,string userPwd)

        {

            // 1.首先通过调用UserDAL类的GetUsersByName方法,根据用户名从数据库中检索用户信息,存储在变量中

            Users users = dal.GetUsersByName(userName);



            // 2.判断,检查users是否为null。如果不为空,表示找到相对应用户名的用户。

            //紧接着双重判断。判断输入的密码(usrePwd)和数据库中存储的密码(Pwd)是否相等,如果不相等,直接返回false,登录失败

            if(users != null)

            {

                if (users.Pwd != userPwd)

                {

                    return false;

                }

            }



            // 3.把输入的用户名和密码和UsersDAL类的GetUsers方法相匹配,存储到users当中

            users = dal.GetUsers(userName, userPwd);

            // 4.当前用户名和密码都为空,则返回false 登录失败

            if (users == null)

            {

                return false;

            }

            // 5.假如都不为空,返回true 登录成功

            return true;

        }

    }

30.回到Login页面,打开设计,双击登录按钮

31.右键SaleSysUI层引用,添加引用

32.然后引包

// 引包

using SaleSysBLL;

33.然后在登录的点击事件里面继续

//2、判断用户输入的用户名和密码是否正确 =》 调用ELL里面的Login方法

            UsersBLL bll = new UsersBLL();

            if (bll.Login(strName,strPwd))

            {

                // 3.验证通过,跳转到Default页面

                Response.Redirect("Default.aspx");

            }

            else

            {

                // 4.验证失败,提示用户名或密码有误(弹窗)

                // Page 表示当前页面对象

                // ClientScript 表示客户端脚本对象,用于与客户端脚本进行交互

                // RegisterStartupScript 用于在页面加载后注册客户端脚本的方法

                // this.GetType() 用于获取当前类的类型,通常是页面或用户控件的类型

                Page.ClientScript.RegisterStartupScript(this.GetType(),"","<script>alert('输入的用户名和密码有误,请重新输入!')</script>");

            }

34.右键UI层,添加新的web窗体,Default

<body>

    <form id="form1" runat="server">

        <div>

            <h3>登录成功!欢迎来到销售系统!</h3>

        </div>

    </form>

</body>

35.右键Login.aspx,设为起始页

36.打开试一下

输入错误的用户名和密码,弹窗

输入正确的用户名和密码,点击登录,跳转页面


原文地址:https://blog.csdn.net/m0_66701589/article/details/140397577

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!