ASP.net 连接Mysql封装:用户登录验证

一.说明

此文是小白在学习张晨光老师的视频教学<<Asp.Net WEB服务器编程技术>>中做的学习笔记,一些知识点也是跟着教程走的,大家也可以去老师的主页去学习,谢谢大家.

二.配置

一.在Web.config中的configuration标签下添加如下代码:

<connectionStrings>
	<add name="Conn_example" connectionString="Database='example';Data Source='127.0.0.1';User Id='root';Password='xxxxx';charset='utf8';pooling=true"/>
</connectionStrings>
<!--
数据库位置:Data Source='127.0.0.1'//此处为本地数据库
用户名:User Id='....'
密码:Password='.....'
字符集:charset='.....'
-->

二.创建一个名为ToolMysqlDate.cs的类,并写入如下代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using MySql.Data.MySqlClient;
using System.Configuration;//所引用config,需要提前引用命名空间
using System.Collections;
using System.Data;

namespace WebApplication5
{
    public class ToolMySqlDate
    {
        //1.数据库的连接,创建等工作
        public static string connstr = ConfigurationManager.ConnectionStrings["Conn_example"].ToString();
        static MySqlConnection conn = new MySqlConnection(connstr);
		
		//封装ExecuteScalar方法,返回值为int类型
        public static int excutScal(String sql,Hashtable ht) {
            conn.Open();

            MySqlCommand cmd = new MySqlCommand(sql, conn);

            //把ht传递过来之后,需要给参数赋值;
            foreach (DictionaryEntry de in ht)
            {
                //第一个参数:key;第二个参数:value值
                cmd.Parameters.AddWithValue(de.Key.ToString(), de.Value.ToString());
            }
			
            int result;
            try
            {
            	//运行并赋值
                result =Convert.ToInt32( cmd.ExecuteScalar());
            }
            finally
            {
                conn.Close();
            }
            //返回
            return result;
        
        }
    }
}

三.前端代码

我们新建一个web login.aspx:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Login.aspx.cs" Inherits="WebApplication5.Login" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title></title>
    <style type="text/css">
        .style2 {
            height: 23px;
            text-align:center;
        }
    </style>
</head>
<body>
    <form id="form1" runat="server">
    <table class="auto-style1">
        <tr>
            <td class="style2" colspan="2">会员登录子系统</td>
        </tr>
        <tr>
            <td>账户:</td>
            <td>
                <asp:TextBox ID="textUser" runat="server"></asp:TextBox>
                <asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ControlToValidate="textUser" ErrorMessage="RequiredFieldValidator" ForeColor="Red">用户名不能为空</asp:RequiredFieldValidator>
            </td>
        </tr>
        <tr>
            <td>密码:</td>
            <td>
                <asp:TextBox ID="textPwd" runat="server" TextMode="Password"></asp:TextBox>
                <asp:RequiredFieldValidator ID="RequiredFieldValidator2" runat="server" ControlToValidate="textPwd" ErrorMessage="RequiredFieldValidator" ForeColor="Red">密码不能为空</asp:RequiredFieldValidator>
            </td>
        </tr>
        <tr>
            <td>
                <asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="重置" />
            </td>
            <td>
                <asp:Button ID="Button2" runat="server" Text="登录" OnClick="Button2_Click1" />
            </td>
        </tr>
        <tr>
            <td>
                <asp:LinkButton ID="LinkButton2" runat="server">忘记密码</asp:LinkButton>
            </td>
            <td>
                <asp:LinkButton ID="LinkButton1" runat="server" OnClick="LinkButton1_Click">注册</asp:LinkButton>
            </td>
        </tr>
    </table>
    </form>
</body>
</html>

界面效果:
在这里插入图片描述

四.后端代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Collections;
using System.Data;

namespace WebApplication5
{
    public partial class Login : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            UnobtrusiveValidationMode = UnobtrusiveValidationMode.None;
        }

        protected void Button1_Click(object sender, EventArgs e)
        {
            //清空
            textUser.Text = "";
            textPwd.Text = "";
        }

        protected void LinkButton1_Click(object sender, EventArgs e)
        {
            //转到注册界面
            Response.Redirect("addUser.aspx");
        }

        protected void LinkButton2_Click(object sender, EventArgs e)
        {
            //转到忘记密码
            Response.Redirect("step1.aspx");
        }

        protected void Button2_Click1(object sender, EventArgs e)
        {
        //验证控件通过后才开始执行
        if (Page.IsValid)
        {
        	//将前端控件的值取出
            string uid = textUser.Text.Trim();
            string pwd = textPwd.Text.Trim();

            //此种方式不安全
            //string sql = "SELECT COUNT(*) FROM USER WHERE NAME='" + uid + "' AND PASSWORD='" + pwd + "'";
			
			//查询的sql语句
            string sql = "SELECT COUNT(*) FROM USER WHERE NAME=?uid AND PASSWORD=?pwd";

			//这里采用Hashtable 的方式进行sql语句的拼接
            Hashtable ht = new Hashtable();
            ht.Add("uid", uid);
            ht.Add("pwd", pwd);
			
			//使用前面分装好的方法
            int result = ToolMySqlDate.excutScal(sql, ht);

			//判断是否验证通过
            if (result > 0)
            {
                Response.Write("验证通过");
                //给Session赋值,并转到系统
                Session["UserName"] = uid;
                Response.Redirect("page01.aspx");
            }
            else
            {

                Response.Write("验证失败");
            }
        }
        }
    }
}

五.知识点

  • 哈希表中的数据遍历给 MySqlCommand 和遍历给MySqlDataAdapter的用法是相同的,遍历完成后,便直接调用数据库方法
//把ht传递过来之后,需要给参数赋值;
foreach (DictionaryEntry de in ht)
{
    //第一个参数:key;第二个参数:value值
    cmd.Parameters.AddWithValue(de.Key.ToString(), de.Value.ToString());
}
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值