当前位置: 首页 > news >正文

第三阶段数据-4:SqlHelper类,数据库删除,DataTable创建

0820:数据库SqlHelper类

1_SqlHelper类

(1)SqlHelper是基于.NET Framework开发的数据库操作组件,主要通过封装ADO.NET对象(如SqlConnection、SqlCommand)简化数据库访问流程。该组件通过静态方法提供统一的数据访问模式,支持传入连接字符串和SQL参数快速执行数据库交互。

(2)SqlHelper类源码:有许多源码资源,可将源码复制到自己的项目中,创建工具类,直接调用类中的静态方法,,这边引用两个博主文章连接

微软原版(注释为英文):微软原版SQLHelper类 - 孤冢清风 - 博客园

中文注释版本:SqlHelper(带详细中文注释)-CSDN博客

(3)常用方法:

  • AssignParameterValues():主要负责给SQL参数赋值。

  • AttachParameters():主要把SQL参数和SqlCommand绑定在一起。核心代码:cmd.Parameters.Add()

  • CreateCommand():主要负责创建SqlCommand实例的。核心代码:SqlCommand cmd=new SqlCommand(sql,conn);

  • SqlHelperParameterCache:此类缓存SQL参数,目的是让创建和使用SQL参数时性能有所提升。

  • PrepareCommand():创建SqlCommand,并给SqlCommand准备参数。

  • ExecuteDataset():执行SQL语句或存储过程,返回一个DataSet。

  • XXXTypedParams():主要是使用强类型的参数来处理SQL语句或存储过程,目的防止SQL注入,提高安全性。

  • ExecuteReader():执行SQL语句或存储过程,返回数据集(多行多列)。

  • ExecuteNonQuery():执行SQL语句或存储过程,返回影响行数。

  • ExecuteScalar():执行SQL语句或存储过程,返回一行一列。

  • FillDataset():执行SQL语句或存储过程,填充数据集。

(4)SqlCommand返回三种数据:

  • cmd.ExecuteNonQuery():影响行数

  • cmd.ExecuteReader():结果集

  • cmd.ExecuteScalar():一行一列

(5)使用示例

//1.引入命名空间
using Microsoft.ApplicationBlocks.Data;
//2.查询,返回表
private void BindDataSource()
{SqlParameter[] sqlParamaters = new SqlParameter[]{new SqlParameter("@StuName",SqlDbType.VarChar)};sqlParamaters[0].Value = $"%{txtStuName.Text}%";//查询所有string sql = "select * from Students where Isdelect=0";if (!string.IsNullOrWhiteSpace(txtStuName.Text)){sql += "and StuName like @StuName";}DataSet ds= SqlHelper.ExecuteDataset(connString, CommandType.Text, sql, sqlParamaters);dataGridView1.DataSource = ds.Tables[0];
}
//删除,返回影响行数
private void btnRemove_Click(object sender, EventArgs e)
{if(dataGridView1.SelectedRows.Count !=1){MessageBox.Show("请先选择一行进行删除");return;}DialogResult re= MessageBox.Show("确定要删除吗?", "确认", MessageBoxButtons.YesNo);if (re != DialogResult.Yes) return;int delId =(int)dataGridView1.SelectedRows[0].Cells["Id"].Value;SqlParameter[] sqlParameters = new SqlParameter[]{new SqlParameter("@Id",SqlDbType.Int)};sqlParameters[0].Value = delId;string sql = "delete from Students where Id=@Id";int row = SqlHelper.ExecuteNonQuery(connString, CommandType.Text, sql, sqlParameters);if (row == 1){BindDataSource();}
}
//增加与更新与删除类似,返回的都是影响行数,不过sql语句与SqlPAarameters数组不同

2_数据库中的删除

(1)数据库的删除分为两种:

  • 物理删除: 把数据从数据库中真正删除 执行delete from 语句

  • 逻辑删除: 数据没有真正从数据中删除 而是更改数据状态 执行 update语句

物理删除逻辑如上述删除代码;逻辑删除代码逻辑如下

private void btnRemove2_Click(object sender, EventArgs e)
{if (dataGridView1.SelectedRows.Count != 1){MessageBox.Show("请先选择一行进行删除");return;}DialogResult re = MessageBox.Show("确定要删除吗?", "确认", MessageBoxButtons.YesNo);if (re != DialogResult.Yes) return;int delId = (int)dataGridView1.SelectedRows[0].Cells["Id"].Value;SqlParameter[] sqlParameters = new SqlParameter[]{new SqlParameter("@Id",SqlDbType.Int),new SqlParameter("@Isdelect",SqlDbType.Bit)};sqlParameters[0].Value = delId;sqlParameters[1].Value = 1;string sql = "update Students set Isdelect=@Isdelect where Id=@Id";int row = SqlHelper.ExecuteNonQuery(connString, CommandType.Text, sql, sqlParameters);if (row == 1){BindDataSource();}
}

3_DataTable创建

(1)代码示例

//创建表 参数为表名
DataTable dt = new DataTable("Student");
//创建列(表头)参数1为列名,参数2为该列数据类型
DataColumn column1 = new DataColumn("Id", typeof(int));
DataColumn column2 = new DataColumn("Name", typeof(string));
DataColumn column3 = new DataColumn("Age", typeof(int));
//将列添加到dt中
dt.Columns.Add(column1);
dt.Columns.Add(column2);
dt.Columns.Add(column3);
Random ra= new Random();
//创建行、
for (int i = 0; i < 10; i++)
{DataRow row = dt.NewRow();row["Id"] = i + 1;row["Name"] = "张三" + i + "号";row["Age"] = ra.Next(10,40);//将行添加到dt中dt.Rows.Add(row);
}
dataGridView1.DataSource= dt;

(2)结果展示

http://www.dtcms.com/a/340501.html

相关文章:

  • 【考研408数据结构-08】 图论基础:存储结构与遍历算法
  • Opencv模板匹配
  • 27.语言模型
  • Java + 工业物联网 / 智慧楼宇 面试问答模板
  • C#APP.Config配置文件解析
  • 案例分享:BRAV-7123助力家用型人形机器人,智能生活未来已来
  • 项目各功能介绍
  • 今天我们学习计算机网络技术的虚拟局域网VLAN以及了解三层交换机的概念
  • 应用在运行时,向用户索取(相机、存储)等权限,未同步告知权限申请的使用目的,不符合相关法律法规要求--教你如何解决华为市场上架难题
  • leetcode 1277. 统计全为 1 的正方形子矩阵 中等
  • (nice!!!)(LeetCode 每日一题) 1277. 统计全为 1 的正方形子矩阵 (动态规划)
  • Tumblr长文运营:亚矩阵云手机助力多账号轮询与关键词布局系统
  • 亚矩阵:跨境卖家 YouTube 私域矩阵搭建的高效解决方案
  • JavaScript 性能优化实战:从原理到落地的完整指南
  • AI硬件 - 华为显卡的演进
  • 深入理解MySQL Ⅳ -- SQL性能分析工具
  • 力扣48:旋转矩阵
  • [TryHackMe]Mr Robot CTF(hydra爆破+Wordpress更改主题)
  • IPSec安全概述
  • 医疗AI与医院数据仓库的智能化升级:异构采集、精准评估与高效交互的融合方向(上)
  • 信创产品TongLinkQ安装及springboot2整合使用
  • AI 视频翻译工具的调研笔记
  • Spring Boot 实战:从项目搭建到部署优化
  • Causal-Copilot: An Autonomous Causal Analysis Agent 论文解读
  • 基于离散点集的三次样条插值与符号表达式构建:从 Scipy 到 Sympy 的完整实现
  • 记一次前端Vue3+Vite+TS项目中使用Mock.js + vite-plugin-mock插件发布到生产(线上)环境填坑汇总
  • 矩阵的特征分解
  • C语言---分隔符、常量、注释、标识符、关键字、空格
  • LoRa 网关组网方案(二)
  • 【科研绘图系列】R语言绘制平行坐标图