------------------------------------------------2345王牌技术员联盟、2345王牌技术员联盟、期待与您交流!-----------------------------------------------------
1.基本用法
using (SqlConnection conn =new SqlConnection(""))
{
conn.Open();
SqlCommand command = conn.CreateCommand();
command.CommandText ="";
using (SqlDataReader dr = command.ExecuteReader(CommandBehavior.CloseConnection))
{
while (dr.Read())
{
//开始读取数据了,接下来你想怎么样就怎么样了
string str = dr.GetSqlString(0).ToString();
}
}
}
2.常用方法
① GetOrdinal:获取指定列名的列序号(索引号),使用这个方法可以把经常变动的列进行固定
int name = dr.GetOrdinal("name");//通过列名来获取当前列的索引号,这样如果下次你列名顺序发生变化也没有关系
② GetName: 获取列名,参数为指定列名的序列号,返回string
string columnName = dr.GetName(name);//通过列名所处的索引号来获取列名名称
③ IsDBNull:判断当前读取的数据是否为Null,返回类型为Bool
dr.IsDBNull(coContactID) ?"NULL" : dr.GetInt32(coContactID).ToString() //相信大家都会使用的
④ NextResult:当查询为批处理查询时,使用这个方法去读取下一个结果集,返回值为Bool,如果存在多个结果集,则为true;否则为false
1//select * from Employee ; select * from County,这样的话就可以采用这种方式
2 dr.NextResult();//记住这个要放在while(dr.Read())之后,因为读取一个数据集之后才能读取下一个数据集
⑤Read:读取数据
读取数据最重要的方法,不说了!
3.常用属性
①HasRow:判断是否包含一行或多行,也就是判断有没有数据,返回类型为Bool
②FieldCount:获取读取的列数,返回类型为Int
③IsClosed:判断读取的数据流是否关闭
所以灵活运用上面的属性讲增强代码的可读性和健壮性,综合示例:
Note:当 SqlDataReader关闭后,只能调用 IsClosed和 RecordsAffected属性,如果调用其它方法或属性将会报错!
4.性能深入剖析
读取数据的时候会有很多种写法,如dr[0].ToString(),dr["Name"].ToString(),dr.GetString(0),dr.GetSqlString(0)等等的读取方式的写法,如果大家去网上查资料就会很容易发现这几种写法存在着一些差异!
下面是读取数据性能的总结:
1 SqlDataReader读取方法:
2 1. DataReader 索引 +基于 [序列号] → dr[0].ToString | Index-based access
3 2. DataReader 索引 +基于 [列名] → dr["Name"].ToString |性能最差
4 3. Get 开头的 + 基于 [序列号] → dr.GetString(0) | type-access
5 4. GetSql 开头的 + 基于 [序列号] → dr.GetSqlString(0) |Provider-specific typed accessor
6 5.GetOrdinal() 通过列名获取这个列的序列号 |这个方法在提高性能上面有作用
7 6.性能(4) --> (3) --> (1) --> (2)
Note:所以在对数据进行读取时要有针对的使用一些性能高的方法,也不是说要追求性能,只是这是一种习惯,对于大多数读取数据库的方法使用索引来读取无疑是最快,记住一句话,“当性能没有成为问题的时候,不要过度的去优化它”,高效而又优美的使用这些方法,才是王道!
---------------------------------------------------2345王牌技术员联盟、2345王牌技术员联盟、期待与您交流!---------------------------------------------------------