一.说明
此文是小白在学习张晨光老师的视频教学<<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());
}