DataReader 类概述

  DataReader 类对应MSSQLSERVER在 System.Data.SqlClient 命名空间中,对应的类是 SqlDataReader,主要用于读取表中的查询结果,并且是以只读方式读取的(即不能修改 DataReader 中存放的数据)。

  正是由于 DataReader 类的特殊的读取方式,其访问数据的速度比较快,占用的服务器资源比较少。

  SqlDataReader 类中常用的属性和方法如下表所示。

属性或方法

说明

FieldCount

属性,获取当前行中的列数

HasRows

属性,获取 DataReader 中是否包含数据

IsClosed

属性,获取 DataReader 的状态是否为已经被关闭

Read

方法,让 DataReader 对象前进到下一条记录

Close

方法,关闭 DataReader 对象

Get XXX (int i)

方法,获取指定列的值,其中XXX代表的是数据类型。例如获取当前行第1列 double 类型的值,获取方法为GetDouble(o)

  使用 DataReader 类读取查询结果

  在使用 DataReader 类读取查询结果时需要注意,当查询结果仅为一条时,可以使用 if 语句查询 DataReader 对象中的数据,如果返回值是多条数据,需要通过 while 语句遍历 DataReader 对象中的数据。

  在使用 DataReader 类读取查询结果时需要通过以下步骤完成:

  1) 执行 SqlCommand 对象中的 ExecuteReader 方法

  具体代码如下。

  SqlDataReader dr=SqlCommand 类实例 .ExecuteReader();

  2) 遍历 SqlDataReader 中的结果

  SqlDataReader 类中提供的 Read 方法用于判断其是否有值,并指向 SqlDataReader 结果中的下一条记录。

  dr.Read()

  如果返回值为 True,则可以读取该条记录,否则无法读取。

  在读取记录时,要根据表中的数据类型来读取表中相应的列。

  3) 关闭 SqlDataReader

  dr.Close()

eg:

  string sql = "SELECT * FROM UserAlertTable;";
  SqlDataReader reader = null;

  //这里使用Tuple元组存储下,list:得到的所有记录的集合。
  List<Tuple<long, DateTime, long>> list = new List<Tuple<long, DateTime, long>>();
  using (SqlConnection con = new SqlConnection(str))
  {
    con.Open();
    SqlCommand cmd = new SqlCommand(sql,con);
    reader = cmd.ExecuteReader();
    while (reader.Read())
    {
      long id = reader["id"] == DBNull.Value ? -1 : (long)reader["id"];
      DateTime datetime = reader["datetime"] == DBNull.Value ? DateTime.MinValue : (DateTime)reader["datetime"];
      long number = reader["number"] == DBNull.Value ? -1 : (long)reader["number"];
      Tuple<long, DateTime, long> tp = Tuple.Create<long, DateTime, long>(id, datetime, number);
      list.Add(tp);
    }
  }
  if (reader != null)
  {
    reader.Close();
  }
  ReadKey();

最新文章

  1. webUploader react 接口设计
  2. Android开发之百度地图--环境搭建
  3. spring-HelloWorld
  4. # 20145334赵文豪 《Java程序设计》第7周学习总结
  5. 构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(31)-MVC使用RDL报表
  6. 【JavsScript】一个元素绑定多个事件
  7. symbol(s) not found for architecture x86_64
  8. Web 技术人员需知的Web 缓存知识
  9. ASPNET中实现在线用户检测(使用后台守护线程)
  10. 多态VI的创建
  11. cobbler部署
  12. SGU 156. Strange Graph(欧拉路)
  13. Clementine 12.0 的使用(因为比较少用,项目中用到才开始接触写一下自己的使用方法)
  14. 在Java中打开浏览器
  15. 蓝桥网试题 java 基础练习 杨辉三角形
  16. AngularJS - 依赖注入(Dependency Injection)
  17. PPT在HTML网页上播放方法
  18. 商品详情页系统的Servlet3异步化实践
  19. 虚拟环境jupyter notebook使用【virtualenv环境】
  20. 旅行商问题(TSP)、最长路径问题与哈密尔顿回路之间的联系(归约)

热门文章

  1. 2019暑假Java学习笔记(二)
  2. 在IDEA上对SpringBoot项目配置Devtools实现热部署
  3. 解决:E: Could not get lock /var/lib/dpkg/lock
  4. TensorFlow之卷积函数(conv2d)
  5. [转]使用apt安装nodejs10
  6. 安裝TA-Lib到想要罵髒話
  7. [LeetCode] 100. Same Tree 相同树
  8. Node.js 多线程完全指南
  9. 记录一次使用iisnode部署node项目遇到的坑!
  10. 托马斯&#183;贝叶斯 (Thomas Bayes)