会使用DataReader对象检索数据(重点下面第三段代码,红色文字提示)
会使用Command对象查询数据
ExecuteReader()取数据一次取一行所有数据,可以把每一列数据专门读取出来。
跟ExecuteScalar()只能取一行一列的区别。
using System.Data.SqlClient;
//第一步:创建数据库连接对象
SqlConnection conn = new SqlConnection("server=.;uid=sa;pwd=sa;database=SchoolSystemDB");
//第二步:打开数据库
conn.Open();
//第三步:创建执行脚本对象(SqlCommand 数据) 数据清单、地址
SqlCommand command = new SqlCommand("select * from Students", conn);
//第四步:执行脚本对象
SqlDataReader reader = command.ExecuteReader();//只进游标,不能往后退
//可以通过reader.HasRows来判断是否有数据
if (reader.HasRows)//如果有数据,才继续读取。HasRows()返回是一个bool值
{
while (reader.Read()) //read()等于netx的意思,下一个。
{
int stuNo = (int)reader["stuNo"];
string? stuName = reader["stuName"].ToString();
Console.WriteLine(#34;学号:{stuNo},姓名:{stuName}");
}
}
reader.Close();//释放游标对象
conn.Close();//释放链接对象
Read()也返回一个布尔值,所以外层的判断可以不要。Read()本身相当于下一个,如果有下一个才返回true,就可以直接写成:
while (reader.Read()) //Read()也返回一个布尔值,所以外层的判断可以不要
{
int stuNo = (int)reader["stuNo"];
string? stuName = reader["stuName"].ToString();
Console.WriteLine(#34;学号:{stuNo},姓名:{stuName}");
}
//游标的使用前提是保证链接的基础之上,根据顺序,一般先关闭游标在断开下面的链接
reader.Close();//关闭游标对象(游标在数据库中也是一个对象,使用完释放掉)
//先释放上面,在关闭数据库链接
conn.Close();//关闭链接对象现在新版本可以使用using把上面这段括起来,使用Dispose()释放资源比Close会快一些。官方给出的解释,咱也不是很懂,建议使用推荐的这种,新的语法糖处理。可以把上面的代码简化改成:
using System.Data.SqlClient;
//第一步:创建数据库连接对象
using (SqlConnection conn = new SqlConnection("server=.;uid=sa;pwd=sa;database=SchoolSystemDB"))
//这里使用上using,下面的conn.Close()就省略了,在大括号范围内运行
{
//第二步:打开数据库,这个打开不能省略
conn.Open();
//第三步:创建执行脚本对象(SqlCommand 数据) 数据清单、地址
SqlCommand command = new SqlCommand("select * from Students", conn);
//第四步:执行脚本对象
using (SqlDataReader reader = command.ExecuteReader())
//这里也是用上using,游标关闭语句也省略了reader.Close(),在大括号内运行
{
while (reader.Read())
{
int stuNo = (int)reader["stuNo"];
string? stuName = reader["stuName"].ToString();
Console.WriteLine(#34;学号:{stuNo},姓名:{stuName}");
}
}//ExecuteReader()超出所用范围被释放掉
}//conn超出所用范围被释放掉什么时候使用这个语法糖using呢?只要对象继承了IDisposable这个接口(可以选择对象按F12向上追踪),就能使用.Close(),只要能使用Close(),就能使用using这种语法糖方式。使用了之后,后面的释放语句就不需要了,因为不能超出作用域大括号。
| 留言与评论(共有 0 条评论) “” |