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();

ADO.NET 四(DataReader)的更多相关文章

  1. ADO.NET_包括DataReader和dataSet的使用

    今天总结了一下ADO.NET编程中DataReader和dataSet两个比较重要的对象的使用,完成了combobox,listbox,以及fpSpread动态添加数据的测试,对使用sqlComman ...

  2. 传智播客ADO.Net项目开发教程具体解释

    内容简单介绍: 本教程为传智播客.Net培训课堂的现场录像,请到140623ls" target="_blank">传智播客.Net学院下载很多其它免费.Net视频 ...

  3. [翻译]比较ADO.NET中的不同数据访问技术(Performance Comparison:Data Access Techniques)

    Performance Comparison: Data Access Techniques Priya DhawanMicrosoft Developer Network January 2002 ...

  4. DataReader类型化数据读取与装箱性能研究

    前言 在各种ORM框架或者SQL映射框架(例如MyBatis,SOD框架之SQL-MAP功能)中,都有将查询的结果映射为内存对象的需求,包括映射到实体类.简单类型(例如Java的POJO,.NET的P ...

  5. sql sever 基础知识及详细笔记

    第六章:程序数据集散地:数据库 6.1:当今最常用的数据库 sql  server:是微软公司的产品 oracle:是甲骨文公司的产品 DB2:数据核心又称DB2通用服务器 Mysql:是一种开发源代 ...

  6. 使用C#开发数据库应用程序

    第一章 用Hello ACCP.NET快速热身(一) 1-1.进入C#世界 a.第一个C#程序 (1)新建项目[项目:project] (2)生成解决方案[生成:build,解决方案:solution ...

  7. linq世界走一走(LINQ TO SQL)

    前言:作为linq的一个组件,同时作为ADO.NET的一个组成部分,LINQ TO SQL提供了将关系数据映射为对象的运行时基础结构. LINQ TO SQL是通过将关系数据库对象的数据模型(如一个数 ...

  8. efcore分表下"完美"实现

    ShardingCore 如何呈现"完美"分表 这篇文章是我针对efcore的分表的简单介绍,如果您有以下需求那么可以自己选择是否使用本框架,本框架将一直持续更新下去,并且免费开源 ...

  9. 017. ADO.NET Connection和command及DataReader

    ADO.NET主要包括Connection , command , DataReader, DataSet, DataAdapter5个对象, 通过这5个对象可以对数据库进行查询, 添加, 修改及删除 ...

随机推荐

  1. vue 移动端禁用安卓手机返回键

    //禁止手机返回键    下面这段代码直接复制在index.html中,可以生效// $(document).ready(function() { if (window.history &&a ...

  2. 用Visual Studio编写UDF的一点小技巧(自动补全宏函数、变量)

    下载Visual Studio,安装VS 下载番茄助手(Visual Assist X),链接:www.wholetomato.com,然后安装番茄助手 打开VS

  3. span 不使用float 靠右对齐且垂直居中

    一般让div 里的span 靠右对齐用的方法比较多的是float:right. 这次由于各种原因我不想用float 先看效果: HTML 部分 <div class="customer ...

  4. rust变量与可变性

    fn main() { //let x = 5; let mut x = 5; //通过const定义常量名称要大写,并且值不可更改 const Y:i32=6; println!("Y i ...

  5. SOAP简介及实例

    SOAP 是基于 XML 的简易协议,可使应用程序在 HTTP 之上进行信息交换. 或者更简单地说:SOAP 是用于访问网络服务的协议. 您应当具备的基础知识 在继续学习之前,您需要对下面的知识有基本 ...

  6. Unity创作赛车游戏的四款插件

    本文,我们将介绍其中4款:Racing Game Starter Kit.GeNa 2 .NWH Vehicle Physics.Curvy Splines. Racing Game Starter ...

  7. linux 命令 文件数量统计

    # 查看当前目录下的文件数量(不包含子目录中的文件) ls -l|grep "^-"| wc -l # 查看当前目录下的文件数量(包含子目录中的文件) 注意:R,代表子目录 ls ...

  8. 本地git工作流

    一:add后的回退代码 1.在原有已经的基础上,又新增加了一个小需求 经过修改,添加到暂存区. 这个时候,会存在modified文件: 2.然后,又说需求不需要存在了 可以进行丢弃 在reset后,需 ...

  9. 微信小程序开发——base64位图片显示问题

    前言: 目前小程序项目需要后端借口提供验证码图片,后端是以base64位返回的,按照H5的做法,前边拼上 data:image/png;base64, 应该就可以了,关键代码如下: H5: <i ...

  10. shell 判断一个字符串是否由字母数字组成

    摘自:http://blog.51cto.com/lynnteng0/804520 describe="it's a describe by yourself" if echo & ...