目录
背景:
Person.cs代码:
WebForm1.aspx代码:
personOperate.cs代码:
最终效果:
背景:
界面效果:
主页面的控件布局:
4个label:
-Label控件用于在页面上显示文本或标签,通常用于标识输入框,显示标题或提供说明性文字
2个Textbox:
-TextBox控件用于在网页上创建可供用户输入的文本框。用户可以在TextBox中输入文本,通常用于接受用户的输入数据
2个RadioButton
-RadioButton控件用于创建单选按钮组。每个RadioButton控件都表示一种选择,用户只能选择其中的一个。在同一组内,只有一个RadioButton可以被选中
3个ChekBox
-CheckBox控件用于创建复选框,允许用户从多个选项中进行多选。用户可以通过勾选或取消勾选Checkbox来表示自己的选择
1个CustomValidator1
-CustomValidator控件允许开发人员自定义验证规则。使用CustomValidator,开发人员可以编写自定义的客户端脚本或服务端代码来执行特定的验证逻辑,以确保用户输入的数据符合特定的要求
1个RequiredFieldValidator1
-是用于执行必填字段验证的控件,通常与其他输入控件(如文本框。下拉框等)结合使用确保用户提交表单时输入了必要的信息
并创建一个WebForm1.aspx窗体和person.cs类(实体类)与personOperate.cs类(数据库打交道)
Person.cs代码:
public class person
{
public string pID;
public string pName;
public string pSex;
public person()
{
}
}
WebForm1.aspx代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data.SqlClient;
using System.Data;
namespace ADONET
{
public partial class WebForm1 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void CustomValidator1_ServerValidate(object source, ServerValidateEventArgs args)
{
string pID = args.Value;
//将CustomValidator控件验证事件中传入得值(用户输入得值),赋给名为pID得字符串变量。
if (personOperate.findPerson(pID))
//通过personOperate类的findPerson方法,检查数据库中是否存在与给定pID相匹配的记录
{
args.IsValid = false;
//返回true(即找到相符的记录),则将args.ISValid设置这是为flase,表示验证不通过
}
else
{
args.IsValid = true;
//返回false(即未找到哦相符的记录),则将args.IsValid设置为True,表示验证通过
}
}
private void fillDg()
//私有方法,名称fillDg,没有参数
{
this.GridView1.DataSource = personOperate.selectAllPerson();
//调用了一个方法,它可能是用来从数据库中检索所有人员信息的操作,并返回一个数据源(比如DataTable或者类似的数据结构)
//将返回的数据源赋值给Gridview1空间的DataSource属性,这意味着要将查询结果作为数据绑定到GridView控件上
this.GridView1.DataBind();
//调用了DataBind()方法,用于将数据源绑定到GridView控件,实现数据呈现功能
//总的来说这段代码表示一个私有方法fillDg(),在该方法中调用了personOperate.selectAllPerson()方法来获取人员信息数据源,并将其板顶到名为GridView1的GridView1控件上,然后通过DataBind()方法将数据显示在网页上
}
protected void BtnAdd_Click(object sender, EventArgs e)
//按钮点击事件的逻辑
{
if (this.IsValid)
//验证页面中所有验证控件是否通过验证,如果页面中的验证控件验证通过,则继续执行后续逻辑;否则,不执行后续逻辑
{
person p = new person();
//创建一个person对象p,并为其属性赋值;
p.pID = this.txtPid.Text;
//从txtpid文本框获取用户输入ID,赋值给pID属性
p.pName = this.txtName.Text;
//从txtName文本框获取用户输入的姓名,赋值给pName属性
if (this.rBtnNan.Checked)
//根据用户选择的性别单选按钮,确定性别并赋值给pSex属性
{
p.pSex = "男";
}
else
{
p.pSex = "女";
}
if (personOperate.insertOperate(p))
//调用personOpate.insertoperate(p),将person对象插入到数据库中。如果插入成功则执行下面操作
{
Response.Write("插入成功");
this.fillDg();
//调用fillDg()方法刷新数据表格(假设该方法用于刷新数据表格)
}
else
{
Response.Write("插入失败");
}
}
}
protected void txtPid_TextChanged(object sender, EventArgs e)
{
}
protected void rBtn_CheckedChanged(object sender, EventArgs e)
{
}
protected void btnUpdate_Click(object sender, EventArgs e)
{
if (!this.CustomValidator1.IsValid)
{
person p = new person();
p.pID = this.txtPid.Text;
p.pName = this.txtName.Text;
if (this.rBtnNan.Checked)
{
p.pSex = "男";
}
else
{
p.pSex = "女";
}
if (personOperate.updateOperate(p))
{
Response.Write("修改成功");
this.fillDg();
}
else
{
Response.Write("修改失败");
}
}
}
protected void btnDel_Click1(object sender, EventArgs e)
{
if (!this.CustomValidator1.IsValid)
//表示对自定义验证控件CustomValidator1进行验证,如果验证不通过(即IsValid属性为Fasle),则执行if语句块中的代码
//IsValid是一个布尔类型的属性,通常用于表示控件或页面是否通过了验证
{
if (personOperate.deleteOperate(this.txtPid.Text))
{
Response.Write("删除成功");
this.fillDg();
}
else
{
Response.Write("删除失败");
}
}
}
protected void btnSelect_Click(object sender, EventArgs e)
{
string c = "";
//定义一个空字符串变量c,用于存储查询条件
if (this.chkPid.Checked)
//检查是否勾选了PID复选框
{
if (this.chkPid.Text == "")
//如果PID复选框为输入文本,则将查询条件设为PID字段为空的记录,使用SQL中的通配符%表示任意字符
{
c = "pID like '%'";
//表示构建了一个查询条件,用于筛选出满足特定条件的数据
//like是SQL中的模糊匹配操作符,用于进行模糊查询
//'%'是SQL中的通配符,表示匹配任意长度的字符(零个或多个字符)
//筛选pID字段值为空或非空的所有记录,即不对pID进行具体的数值匹配,而是选择所有的记录
}
else
{
c = "pID=" + this.txtPid.Text;
//表示构建了一个查询条件,用于筛选pID字段的等于用户在txtPid中输入的特定数值的记录
/*
* pID 是要进行筛选的字段名。
this.txtPid.Text 获取了用户在文本框 txtPid 中输入的数值。
"=" 是 SQL 中的等于操作符,在这里表示
*/
}
}
else
{
c = "pID like '%'";
//表示筛选出PID字段值为空的记录,因为'%'是SQL中的通配符,代表任意字符
}
if (this.chkName.Checked)
//检查是否勾选了姓名复选框,如果勾选则在查询条件中添加根据姓名进行的模糊匹配的筛选条件
{
c += "and personName like '%" + this.txtName.Text + "'";
}
if (this.chkSex.Checked)
//检查是否勾选了性别复选框
{
if (this.rBtnNan.Checked)
//检查是否勾选了男性别,则在查询条件中添加筛选条件为男性的记录
{
c += "and personSex='男'";
}
else
{
c += "and personSex='女'";
}
}
DataView dv = new DataView(personOperate.selectAllPerson());
//通过调用PersonOperate.selectAllPerson()方法获取所有人员数据,并使用DataView处理和展示
dv.RowFilter = c;
//根据构建好的查询条件c对数据进行筛选
dv.Sort = "pID Desc";
//按照PID字段进行降序排序
this.GridView1.DataSource = dv;
//将DataView对象设置GridView1的控件的数据源
this.GridView1.DataBind();
//将数据绑定到GridView1控件上,实现数据展示
}
public bool deleteOperate(string pID)
{
try
{
SqlConnection con = personOperate.createCon();
con.Open();
SqlCommand cmd = new SqlCommand("DELETE FROM person WHERE pID = @pID", con);
cmd.Parameters.AddWithValue("@pID", pID);
cmd.ExecuteNonQuery();
return true;
}
catch (Exception ex)
{
Console.WriteLine("发生异常: " + ex.Message);
return false;
}
}
protected void GridView1_SelectedIndexChanged(object sender, EventArgs e)
{
}
protected void chkName_CheckedChanged(object sender, EventArgs e)
{
}
}
}
personOperate.cs代码:
using System;
using System.Collections.Generic;
using System.Collections.Specialized;
using System.Data;
using System.Data.SqlClient;
using System.Drawing;
using System.Linq;
using System.Linq.Expressions;
using System.Security.Cryptography;
using System.Web;
namespace ADONET
{
public class personOperate
{
public personOperate()
{
}
public static SqlConnection createCon()
{
return new SqlConnection("server=.;database=adoNetTest;uid=sa;pwd=123;");
//数据库连接对象
}
public static bool findPerson(string pID)
//查看对应得用户是否存在
{
SqlConnection con = personOperate.createCon();
//创建一个adoNetTest数据得连接,并将该连接存储在con变量中,之后可以使用这个连接对象来与数据库进行交互
con.Open();
//打开
//SqlCommand cmd = new SqlCommand("select count(*) from person where pID='" + pID + "'", con);
//创建SqlCommand对象:创建一个新得SqlCommand对象,并将其赋值给变量cmd,SqlCommand用于表示要对数据库执行得SQL命命令或查询
SqlCommand cmd = new SqlCommand("select count(*) from person where pID=@pID", con);
cmd.Parameters.AddWithValue("@pID", pID);
//创建一个SqlComand对象,但这次使用了参数化查询。@pID是一个参数占位符,而cmd.Parameters.AddWithValue方法将pID变量得值安全绑定到这个参数上。这种方法是安全,防止SQL注入。
//select count(*);这部分表示查询满足条件
int count = Convert.ToInt32(cmd.ExecuteScalar());
//cmd.ExecuteScalar:执行cmd对象所代表的SQL查询,并返回一个标量值(即单个值)。这里面,SQL查询是"select count(*) from person where pID=@PID",计算数据库中person表中pID列与参数@pID相匹配的行数
//Convert.ToIn32(...)将:将cmd.ExecuteSclar()返回的标量值转换为32位整数(int类型)。因为count(*)返回一个整数(即行数),所以这里使用Convert.ToInt32整数变量
//执行sql查询来计算persion表中与给定pID匹配得行数,并将这个行数(作为整数)存储count变量中
if (count > 0)
{
return true;
}
else
{
return false;
}
}
public static DataTable selectAllPerson()
//静态方法seletAllPerson(),用于从数据库中检索所有人员信息并返回一个DataTable对象
{
SqlConnection con = personOperate.createCon();
//创建一个SqlConnection对象con,通常personOperate.createCon()方法来创建数据连接
SqlDataAdapter sda = new SqlDataAdapter();
//创建一个SqlDataAdapter对象 sda用于从数据中检索数据。
sda.SelectCommand = new SqlCommand("SELECT * FROM person", con);
//设置sda的SelectCommand属性为一个查询语句"SELECT * FROM person",该用户用于选择person表中的所有列和行
DataSet ds = new DataSet();
//创建一个DataSet对象ds用于存储从数据库检索到的数据
sda.Fill(ds, "person");
//查询结果填充到DataSet中,并为结果集起一个名为"person"的表名
return ds.Tables["person"];
//返回DataSet中名为"person"的表,即包含了数据库中检索所有人员的DataTable对象
}
public static bool insertOperate(person p)
{
try
{
SqlConnection con = personOperate.createCon();
con.Open();
SqlCommand cmd = new SqlCommand("insert into person (pID, personName, personSex) values (@pID, @pName, @pSex)", con);
SqlParameter para = new SqlParameter("@pID", SqlDbType.VarChar, 10);
//创建一个新的SqlParameter对象para,用于表示SQL命令中的一个参数有
//sqlDbType枚举,可以指定参数的数据类型,如整数,字符串、日期和时间等,在与数据库进行交互时确保参数的类型与数据列的类型匹配。这样可以防止数据类型不匹配引起的错误,并提高程序的安全性和可靠性
para.Value = p.pID;
//将person对象p的pID属性的值赋值给参数para的Value属性。这样就将person对象中的pID值传递给了SQL参数,准备将其插入到数据中
cmd.Parameters.Add(para);
//创建好的参数para添加到SqlCommand对象cmd的参数集合中,通过将参数添加到SQL命令中,我们可以将person对象的pID属性的值安全地传递给数据库,避免了SQL注入等安全问题,同时也方便了参数话查询的执行
para = new SqlParameter("@pName", SqlDbType.VarChar, 20);
//创建一个新的SqlParameter对象para,用于表示SQL命令中的一个参数
/*"@pName":参数的名称,在SQL命令中通过该名称引用这个参数
* SqlDbType.VarChar类型的参数,他表示参数值的最大长度为20
*/
para.Value = p.pName;
//将person对象p的pName属性的值赋值给参数para的value属性,这样就将person对象总的pName的值传递给了SQL参数,准备将其擦插入到数据库
cmd.Parameters.Add(para);
//将person对象p的pName属性的值给参数para的value属性,这样将person对象中pName值传递了SQL参数,准备将其掺入到数据库中
para = new SqlParameter("@pSex", SqlDbType.VarChar, 2);
para.Value = p.pSex;
cmd.Parameters.Add(para);
cmd.ExecuteNonQuery();
/*用于执行SQL命令(如INSERT、UPDATE、DELETE)并返回受影响的行数的方法
* 执行cmd所代表的SQL命令,并返回执行该命令后影响的行数
* 执行sqlcommand对象cmd中保存的SQL命令,比如插入person对象数据的sql语句,然后返回插入操作影响的行,以便进行处理或检查操作是否成功
*/
return true;
}
catch (Exception ex)
{
// 可以在这里处理异常
Console.WriteLine("发生异常: " + ex.Message);
return false;
}
}
public static bool updateOperate(person p)
{
try
{
SqlConnection con = personOperate.createCon();
//调用personOperte.createCon方法创建一个SqlConneciont对象,用于与数据库建立连接
con.Open();
SqlCommand cmd = new SqlCommand("UPDATE person SET personName = @PersonName, personSex = @PersonSex WHERE pID = @PersonID", con);
//创建一个SqlCommand对象,用于执行SQL更新语句
//SQL更新语句会更新名为"person"表中的记录,将personName和personSex字段更新为通过参数传入的值,条件是ID等于通过参数传入的personID
cmd.Parameters.AddWithValue("@PersonName", p.pName);
//为 SQL 命令对象的参数 @PersonName 设置值为 person 对象 p 中的 pName 属性值。
cmd.Parameters.AddWithValue("@PersonSex", p.pSex);
cmd.Parameters.AddWithValue("@PersonID", p.pID);
//将SQL更新语句会更新"person"表中的记录,将personName和personSex字段更新为person对象对象p中对应的属性属性值,条件是pID等于person对象p的pID属性的值
cmd.ExecuteNonQuery();
//执行SQL更新语句,实际更新数据库中的记录
return true;
//如果更新操成功执行完毕,方法返回true,表示更新成功
}
catch (Exception e)
//在捕获到异常时,返回False,表示更新操作失败
{
return false;
}
//表示用于更新数据库中人员信息的方法,首先建立数据库连接,然后执行SQL语句来更新指定记录的字段值,最后返回更新操作的结果(成功或失败),在出现异常,方法或返回Fasle
}
public static bool deleteOperate(string pID)
{
try
{
SqlConnection con = personOperate.createCon();
con.Open();
//SqlCommand cmd = new SqlCommand("delete from person where pID='" + pID + "'", con);
SqlCommand cmd = new SqlCommand("DELETE FROM person WHERE pID = @pID", con);
cmd.Parameters.Add("@pID", SqlDbType.VarChar).Value = pID;
cmd.ExecuteNonQuery();
return true;
}
catch (Exception e)
{
return false;
}
}
}
}
最终效果: