C# ADO.NET 操作数据库 学习笔记

一、重要对象(五大对象)

1.Connection:连接对象

负责配置、建立和管理连接,通过连接池优化性能,并确保资源安全释放。

2.Command:命令对象

在数据库中执行的SQL命令 或 存储过程

3.DataReader:数据读取器

用于从数据库中读取快速的且只是前向的、只读的数据流。意味着只能按照一定顺序从数据流中取出数据。如果要操作数据使用DataSet.

适用于执行查询操作,返回结果集。

4.DataAdapter:数据适配器

适配器用于填充DataSet对象,并解决数据源和数据集之间的差异。

可以执行查询、插入、更新和删除操作。

5. DataSet:数据集

数据在内存中的表示形式。它包括多个DataTable对象,而DataTable包含列和行,就像一个普通的数据库中的表。可以包含多个表、关系和约束。

用于离线操作和数据缓存。

--------------------------------------------------------------------

DataTable:

表示DataSet中的一个表。

可以独立于数据库存在,用于存储和管理数据。

SqlParameter:

表示 SqlCommand 的参数,或者其与 DataSet 列的映射。

sql拼接,有sql注入风险,正规做法:借助SqlParameter,可以解决sql注入风险

二、重要类的关键代码

a. SqlConnection建立和SQL Server 数据库的连接。
如:

 // Server=服务器名称(本机:.,localhost,127.0.0.1,计算机名,IP  远程:IP)
 //database=数据库名称;user=登录SQL的用户名;pwd=登录SQL的用户名的密码;
string connString = "server=.;database=xxx;uid=sa;pwd=xxx;";
using(SqlConnection conn = new SqlConnection(connString)){
	conn.Open();
}

b. SqlCommand执行SQL Server命令或存储过程。
如:

SqlCommand command = new SqlCommand(sql, conn);
command.ExecuteXXX();

c. SqlDataReader用来读取SQL Server数据中的数据。SqlDataReader不能直接给DataGridView使用。
如:

SqlDataReader dataReader = new SqlReader(cmd);
DataTable dt = new DataTable();
dt.Load(dataReader);

d. SqlDataAdapter 用于在数据库和DataSet之间传输数据。
如:

SqlDataAdapter dataAdapter = new SqlDataAdapter(cmd)
DataSet ds = new DataSet()
dataAdapter.Fill(ds);

e. DataSet 数据的容器,可以包含多个数据表(DataTable)。

--------------------------------------------------------------------

SqlParameter表示SqlCommand的参数,或者其与DataSet列的映射。

// sql参数的命名约定:@开头
// SqlDbType是sql参数在数据库中的数据类型。
// Size是sql参数在数据库中的数据类型长度。

SqlParameter[] sqlParameters = new SqlParameter[]{
    new SqlParameter("@StuName",SqlDbType.VarChar),
    new SqlParameter("@AgeStart",SqlDbType.Int),
    new SqlParameter("@AgeEnd",SqlDbType.Int),
    new SqlParameter("@Sex",SqlDbType.Bit),
    new SqlParameter("@BirthdayStart",SqlDbType.DateTime),
    new SqlParameter("@BirthdayEnd",SqlDbType.DateTime),
};

数据库设计在这里插入图片描述

// 给参数赋值

sqlParameters[0].Value = $"%{txtStuName.Text}%";
sqlParameters[1].Value = nudAgeStart.Value;
sqlParameters[2].Value = nudAgeEnd.Value;
sqlParameters[3].Value = cbbSex.SelectedValue;
sqlParameters[4].Value = dtpBirthdayStart.Value.ToString("yyyy-MM-dd") + " 00:00:00";
sqlParameters[5].Value = dtpBirthdayEnd.Value.ToString("yyyy-MM-dd") + " 23:59:59";

窗体设计
在这里插入图片描述

// 在sql中使用参数

string sql = $"select * from Student where 1=1";
if (!string.IsNullOrWhiteSpace(txtStuName.Text))
    sql += " and StuName like @StuName";

if (nudAgeStart.Value > 0)
    sql += " and Age>=@AgeStart";

if (nudAgeEnd.Value > 0)
    sql += " and Age<=@AgeEnd";

if (cbbSex.SelectedValue.ToString() != "-1")
    sql += " and Sex=@Sex";

if (!string.IsNullOrWhiteSpace(dtpBirthdayStart.Text))
    sql += " and Birthday>=@BirthdayStart";

if (!string.IsNullOrWhiteSpace(dtpBirthdayEnd.Text))
    sql += " and Birthday<=@BirthdayEnd";

// 必须把SqlParameter和SqlCommand建立联系,sql字符中的参数才能被sql参数的值替换。
// 创建一个命令实例。

SqlCommand command = new SqlCommand(sql, connection);
command.Parameters.Clear(); // 清空命令使用的参数
command.Parameters.AddRange(sqlParameters);

// Execute执行命令,两种情况:a.返回影响行数(Insert, Update, Delete语句返回的都是行数)。b.返回结果集(Select返回是结果集) c.返回第一行第一列(本质上也是结果集)
// 执行命令,把命令返回的结果集存储到
dataReader

 SqlDataReader dataReader = command.ExecuteReader();

// 数据表,是一个存储数据的容器
// DataSet数据集,一个数据集中有多张数据表(DataTable)

DataTable dt = new DataTable();

// 让dt自动加载dataReader中的数据(把dataReader的数据转存到dt中)

dt.Load(dataReader);

// 绑定数据源,

dataGridView1.DataSource = dt;

// 3. 关闭数据库连接

connection.Close();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我要打打代码

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值