黑马程序员之ADO.NET学习笔记:SqlDataReader(数据流读取器)

------------------------------------------------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王牌技术员联盟、期待与您交流!---------------------------------------------------------


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值