第三阶段数据-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)结果展示