6.1 SqlDataReader介绍
SqlDataReader: 提供一种从SQLServer数据库中读取只进的数据流。
特点 : 快速的、轻量级、只读的、遍历访问每一行数据的数据流
向一个方向、一行一行的、不能向后读取,不能修改数据。
缺点:不灵活,只适合数据小的情况,读取数据,一直占用连接
读取方式:
Read() 获取下一行的数据,返回true——有数据
当调用Read()方法返回False——不再有数据行
注意:
1.连接对象需一直保持Open状态,若连接关闭,是不能读取数据的。
使用完成后,应该马上调用close(),不然Reader对象会一直占用连接的。
2.读取时尽量使用与数据库字段类型相匹配的方法来取值,会减少因类型不一致而增加类型转换操作性能损耗。
3.cmd.ExecuteReader()获取存储过程的返回值或输出参数,先调用reader.Close(),然后才能获取参数的值。
4.没有读取到末尾就要关闭reader对象时,先调用 cmd.Cancel(),然后再调用reader. Close().
常用属性:
Conection: 获取与Reader对象相关的SqlConnection
FiedCount: 当前行中的列数。
HasRows:reader是否包含行。 true 包含一行或多行 ;false 没有数据
IsClosed:reader对象是否已关闭 。 true:关闭 ; false:打开
Item[int]:通过列序号取值,给定列序号的情况,获取指定列的值 dr[1] object类型
Item[String]: 通过列名取值,获取指定列的值 dr["UserName"] object类型
常用方法
Close() 关闭DataReader对象
GetInt32(i)--根据数据类型相匹配的方法获取指定列的值 ,对应的还有GetString(i),GetDecimal(i),.....
GetFieldType(i) 获取数据类型的Type信息
GetName(i) 获取指定列的列名
GetOrdinal(列名) 获取指定列名的列序号
Read() 使dr前进到下一条记录
NextResult() 使dr 前进到下一个结果集
SqlDataReader reader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
while (reader.Read()) --前进到下一条记录
{
int id =reader.GetInt32(0);//读第一列的值,通过序号读取
string cardNo = reader["CardNo"].ToString();//通过列名读取值
int typeId = (int)reader["CTypeId"];//通过列名读取
int col_index=reader.GetOrdinal("CTypeName");//获取列序号
string typeName = reader.GetString(col_index);//获取列序号读取
string colName=reader.GetName(4);//获取指定列的列名
decimal balance=(decimal)reader[colName];
}
reader.NextResult();//前进到下一个结果集
.....
reader.Close();//关闭reader