ASP.NET-简单(增、删、改、查)

目录

背景:

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;
            }
        }
    }
}

最终效果:




 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/472975.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

泳道图手把手快速上手(附带软件)

🍁 作者:知识浅谈,CSDN签约讲师,CSDN博客专家,华为云云享专家,阿里云专家博主 📌 擅长领域:全栈工程师,大模型,爬虫、ACM算法 💒 公众号&#xff…

有了std::thread,为什么还需要引入std::jthread?

C进阶专栏:http://t.csdnimg.cn/HGkeZ 目录 1.前言 2.std::is_invocable_v 3.std::jthread 3.1.构造函数 3.2.std::jthread无需join/detach使用实例 3.3.std::jthread处理外部请求中断实 3.4.处理中断请求示例代码 4.特性 5.总结 1.前言 C11以来提供了C原…

高校二手交易平台|基于JSP(Java脚本页面)+ Mysql+Java+ B/S结构的高校二手交易平台设计与实现(可运行源码+数据库+设计文档)

推荐阅读100套最新项目 最新ssmjava项目文档视频演示可运行源码分享 最新jspjava项目文档视频演示可运行源码分享 最新Spring Boot项目文档视频演示可运行源码分享 2024年56套包含java,ssm,springboot的平台设计与实现项目系统开发资源(可…

SSA优化朴素贝叶斯分类预测(matlab代码)

SSA-朴素贝叶斯分类预测matlab代码 麻雀搜索算法(Sparrow Search Algorithm, SSA)是一种新型的群智能优化算法,在2020年提出,主要是受麻雀的觅食行为和反捕食行为的启发。 数据为Excel分类数据集数据。 数据集划分为训练集、验证集、测试集,比例为8&a…

Java毕业设计 基于SSM网上花店 订花系统 在线花店

Java毕业设计 基于SSM网上花店 订花系统 在线花店 SSM jsp 网上花店 订花系统 在线花店 功能介绍 前端用户:首页 图片轮播 搜索 登录 注册 鲜花分类 分类显示 折扣花束 热销花束 花卉列表 花卉详情 收藏 加入购物车 评价 活动公告 公告详情 买家留言 我的购物车 购…

Linux编程4.9 网络编程-建立连接

1、TCP的连接与断开 三次握手与四次挥手 2、服务器端并发性处理 2.1 多进程模型 一个父进程,多个子进程父进程负责等待并接受客户端连接子进程: 完成通信,接受一个客户端连接,就创建一个子进程用于通信。 2.2 多线程模型 多线程服务器是…

5 Redis主从集群

文章目录 Redis主从集群1.1主从集群搭建1.1.1 伪集群搭建与配置1.1.2 分级管理1.1.3 容灾冷处理 1.2主从复制原理1.2.1 主从复制过程1.2.2 数据同步演变过程 2.1 哨兵机制实现2.1.1 简介2.2.2 Redis 高可用集群搭建2.2.3 Redis 高可用集群的启动2.2.4 Sentinel 优化配置 3.1 哨…

XshellPlus V7.0.0033r 绿化便携版

Xshell,最好用的Linux远程连接工具,最强大的SSH终端管理器、SSH远程主机连接客户端 。Xshell,轻松管理远程服务器,会话管理器,支持多选项卡管理主机,支持远程协议Telnet、Rlogin、SSH/SSH PKCS#…

Springboot+vue的船舶维保管理系统(有报告)。Javaee项目,springboot vue前后端分离项目。

演示视频: Springbootvue的船舶维保管理系统(有报告)。Javaee项目,springboot vue前后端分离项目。 项目介绍: 采用M(model)V(view)C(controller&#xff09…

备战秋招(coding篇)

其中coding题目来源于师兄面试经验 1、链表的结构体反转链表 本质上就是一个构造函数 struct ListNode{int val_;ListNode* next_;ListNode() : val_(0), next_(NULL) {}ListNode(int x) : val_(x), next_(NULL) {}ListNode(int x, ListNode* next) : val_(x), next_(next) …

我的保研材料全部损坏了!这个压缩包文件格式未知或数据已经被损坏不可预料的压缩文件末端

求助各位友友,我的保研材料全部没了! 之前为了清理D盘,把之前保研期间准备的几个G的材料全部压缩放在了U盘,但是现在却损坏打不开了,之前为了省事也没有添加过“恢复记录”!!! 先声…

什么是状态压缩DP???

1. 引言 相信大家已经对普通的01背包或者其他背包问题已经很熟练了,但是有时候我们去解决NP问题(指数级别的复杂度,比如N!),时间复杂度就会非常之大 所以,这个时候我们需要寻找更加优化的方法…

数据结构算法 - 数组 Array

一、概念 结构是一种线性表(元素排列成直线的结构),创建数组会开辟一块连续的内存空间,长度固定无法更改,元素可以重复且只能是同一种类型(Object类型数组除外)。优点查询快:由于元…

对话奇酷网络董事长吴渔夫: 迟到的游戏公司会被AI浪潮卷入海底

“ 迟到的游戏公司会被无形的 AI 浪潮卷入海底。” 整理 | 梦婕 编辑 | 云舒 出品|极新 2024年3月4日,在极新与吴渔夫的对话中,吴渔夫多次呼吁“全力拥抱AI”。在这场AI浪潮中,作为中国网游的先锋,他带着 25 年“中…

外包干了1个月,技术明显进步。。。

我是一名大专生,自19年通过校招进入湖南某软件公司以来,便扎根于功能测试岗位,一晃便是近四年的光阴。今年8月,我如梦初醒,意识到长时间待在舒适的环境中,已让我变得不思进取,技术停滞不前。更令…

GraalVM:新一代跨语言虚拟机的崛起

有朋友后台私信让聊聊GraalVM,目前这玩意我只自己尝鲜搞过,没搞过线上,后续有机会会补充个实践 其实,随着信息技术的快速发展,编程语言多样化已成为软件开发领域的常态。为了满足不同编程语言间的互操作性和性能需求&a…

Java特性之设计模式【组合模式】

一、组合模式 概述 组合模式(Composite Pattern),又叫部分整体模式,是用于把一组相似的对象当作一个单一的对象。组合模式依据树形结构来组合对象,用来表示部分以及整体层次。这种类型的设计模式属于结构型模式&#x…

隐私计算实训营学习一:数据可信流通,从运维信任到技术信任

文章目录 一、数据可信流通二、数据可信流通的技术信任基础三、技术信任开启数据密态时代,保障广域数据可信流通 一、数据可信流通 可信数据流通体系:数据二十条第一次明确提出可信流通,建立数据来源可确认、使用范围可界定、流通过程可追溯…

金融知识分享系列之:支撑阻力

金融知识分享系列之:支撑阻力 一、支撑阻力原理二、支撑阻力作用1.识别市场资金的预期2.作为入场和平仓的重要参考 三、寻找支撑阻力四、延伸思考五、支撑阻力总结 一、支撑阻力原理 支撑阻力核心要素: 锚定效应订单驱动 支撑阻力原理: 市…

在DevEco Studio中第一次使用网络图片不显示问题

当我们新建项目 第一次使用网络图片 没有显示时 加这段代码就可以了 如果刷新图片还是没有显示 就重启编辑器。 "requestPermissions": [{"name": "ohos.permission.INTERNET"}],