C#使用SQL DataReader访问数据的优点和实例

DataReader

DataReader对象提供了用顺序的,只读的方式读取Command对象获得的数据结果集,正是因为DataReader是以顺序的方式连续的读取数据,所有DataReader会以独占的方式打开数据库的连接

由于DataReader只执行读的操作(只读),并且每次只在内存缓冲区里存储结果集中的一条数据,所有使用DataReader的对象的效率比较高,如果要查询大量数据,同时不需要随机访问和修改数据,DataReader是优先的选择

DataReader 对象的常用属性

  • FieldCount 属性 表示记录中有多少字段
  • HasRows 属性 用来表示DataReader是否包含数据
  • IsClosed 属性 表示DataReader是否关闭

DataReader对象常用方法

  • Close 方法 将DataReader对象关闭
  • GetDataTypName 方法 取得指定的字段数据形态(类型)
  • GetName 方法 取得指定的字段数据名称
  • GetOrdinal 方法 取得指定字段名称在记录中的顺序
  • GetValue 方法 取得指定字段的数据
  • GetValues 方法 取得全部字段的数据
  • Read 方法 读取下一条记录

实例 :

mytable01表中有Id,姓名(name),年龄(age),性别(gender),部门(department),几个字段,并且有几条语句

using System;
using System.Data.SqlClient;
namespace DataReaderDemo
{
  class Program
  {
    static void Main(string[] args)
    {
      string constr = "Server = .; user=name;pwd=mima;database=mysql";
      SqlConnection myCon = new SqlConnection(constr);
      try
      {
        myCon.Open();
        string sql = "select * from mytable01 ";
        SqlCommand mycom = new SqlCommand(sql, myCon);
        //声明DataReader
        SqlDataReader mydr;
        mydr = mycom.ExecuteReader();
        if (mydr.HasRows)
        {
          Console.WriteLine("mytable01中存在数据");
        }
        else
        {
          Console.WriteLine("mytable01中不存在任何数据");
        }
        //----------------方法----------------------
        Console.WriteLine("第一列的数据类型"+mydr.GetDataTypeName(0));
        Console.WriteLine("获取对应列的名称:(第一列)"+mydr.GetName(0));
        string mystr = "age";  //直接写会报异常,需要有个转换的过程
        Console.WriteLine(mydr.GetOrdinal(mystr));
        /* 此时将上面的15行的str,换为
         *  string sql = "select * from mytable01 where id=1";
        if (mydr.Read())
        {
          Console.WriteLine("取得指定字段的数据:" + mydr.GetValue(0));
        }
         */
        /*将15行的 str更改为:
         * string sql = "select * from mytable01 where gender='男'";
        object[] myobj = new object[mydr.FieldCount];
        while(myde.Read()){
          mydr.GetValues(myobj);
          foreach (object item in myobj)
          {
            Console.Write(item + "\t");
            Console.WriteLine();
          }
         }
        */
        //访问DataReader 对象时使用索引要比字段名称快很多
        while (mydr.Read())
        {
          Console.WriteLine(mydr[0].ToString()+",");
          Console.WriteLine(mydr[1].ToString() + ",");
          Console.WriteLine(mydr["gender"].ToString());
        }
        //----------------属性----------------------
        Console.WriteLine("表中有几个字段:"+mydr.FieldCount);
        Console.WriteLine("是否关闭:"+mydr.IsClosed);
        mydr.Close();
        Console.WriteLine("是否关闭:" + mydr.IsClosed);
      }
      catch(Exception ex)
      {
        Console.WriteLine(ex.Message.ToString());
      }
      finally
      {
        myCon.Close();
      }
      Console.Read();
    }
  }
}

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对我们的支持。如果你想了解更多相关内容请查看下面相关链接

(0)

相关推荐

  • c#几种数据库的大数据批量插入(SqlServer、Oracle、SQLite和MySql)

    在之前只知道SqlServer支持数据批量插入,殊不知道Oracle.SQLite和MySql也是支持的,不过Oracle需要使用Orace.DataAccess驱动,今天就贴出几种数据库的批量插入解决方法. 首先说一下,IProvider里有一个用于实现批量插入的插件服务接口IBatcherProvider,此接口在前一篇文章中已经提到过了. /// <summary> /// 提供数据批量处理的方法. /// </summary> public interface IBatch

  • C#简单访问SQLite数据库的方法(安装,连接,查询等)

    本文实例讲述了C#简单访问SQLite数据库的方法.分享给大家供大家参考,具体如下: 下载最新版SQLite(http://www.sqlite.org/download.html),其他版本也可以,这里使用的版本是sqlite-3_6_6_1 a.解压后copy c:\sqlite-3_6_6_1 b.进入cmd模式,进入sqlite-3_6_6_1目录,执行sqlite3 mytest.db c. create table test (seq int,desc varchar(8)); in

  • C#操作SQLite数据库之读写数据库的方法

    本文实例讲述了C#操作SQLite数据库之读写数据库的方法.分享给大家供大家参考,具体如下: 这里演示读写数据库并在窗体(Form)中显示其数据,其方式为: 读: Database(SQLite) -> DataAdapter -> DataSet -> DataGridView 写: Database(SQLite) <- DataAdapter <- DataSet <- DataGridView 1.假设现有数据库表student,其字段如下: ID(自增字段,主

  • C#连接到sql server2008数据库的实例代码

    废话不多说了,直接给大家贴代码了,具体代码如下所示: namespace MyFirstApp { class Program { static void Main(string[] args) { SqlConnection conn = null; SqlCommand comm = null; SqlDataReader sdreader = null; try { string ConStr = "server=192.168.1.110;uid=sa;pwd=woaifr0828;da

  • C#使用SqlDataAdapter对象获取数据的方法

    本文实例讲述了C#使用SqlDataAdapter对象获取数据的方法.分享给大家供大家参考,具体如下: 一.SqlDataAdapter对象 1. SqlDataAdapter特性 SqlDataAdapter类用作ADO.NET对象模型中和数据连接部分和未连接部分之间的桥梁.SqlDataAdapter从数据库中获取数据,并将其存储在DataSet中.SqlDataAdapter也可能取得DataSet中的更新,并将它们提交给数据库. SqlDataAdapter是为处理脱机数据而设计的,调用

  • C#使用SQL Dataset数据集代码实例

    ADO.NET数据访问技术的一个突出特点就是支持离线访问,而实现这种离线访问的技术核心急速DataSet对象,该对象通过数据驻留在内存来实现离线访问. DataSet对象由一组DataTable对象组成,这些对象与DataRelation对象又包含Row(行),集合,Columns(列)集合,Rows集合是有多个DAtaRow对象组成,Columns集合是由多个Datacolumns对象组成. 步骤: 1,引入命名空间System.Data: 2,创建DataSet对象 3,创建DataTabl

  • C#实现连接SQL Server2012数据库并执行SQL语句的方法

    本文实例讲述了C#实现连接SQL Server2012数据库并执行SQL语句的方法.分享给大家供大家参考,具体如下: 开发工具:Visual Studio 2012 数据库: SQL Server 2012 使用Visual Studio时还是直接和微软自家的SQL Server数据库连接比较方便,就像使用Eclipse时和MySQL连接便捷一样的道理 无论使用什么工具步骤都一样: 1. 首先保证相关工具都已经正确安装了 2. 开启数据库连接服务 3. 在开发工具中通过用户名和口令与数据库进行关

  • C#实现Excel表数据导入Sql Server数据库中的方法

    本文实例讲述了C#实现Excel表数据导入Sql Server数据库中的方法.分享给大家供大家参考,具体如下: Excel表数据导入Sql Server数据库的方法很多,这里只是介绍了其中一种: 1.首先,我们要先在test数据库中新建一个my_test表,该表具有三个字段tid int类型, tname nvarchar类型, tt nvarchar类型 (注意:my_test表中的数据类型必须与Excel中相应字段的类型一致) 2. 我们用SELECT * FROM  OPENROWSET(

  • C# 操作PostgreSQL 数据库的示例代码

    什么是PostgreSQL? PostgreSQL是一个功能强大的开源对象关系数据库管理系统(ORDBMS). 用于安全地存储数据; 支持最佳做法,并允许在处理请求时检索它们. PostgreSQL(也称为Post-gress-Q-L)由PostgreSQL全球开发集团(全球志愿者团队)开发. 它不受任何公司或其他私人实体控制. 它是开源的,其源代码是免费提供的. PostgreSQL是跨平台的,可以在许多操作系统上运行,如Linux,FreeBSD,OS X,Solaris和Microsoft

  • C#在MySQL大量数据下的高效读取、写入详解

    前言 C#操作MySQL大量数据最常见的操作便是 select 读取数据,然后在C#中对数据进行处理, 完毕后再插入数据库中.  简而言之就 select -> process -> insert 三个步骤. 对于数据量小的情况下(百万级别 or 几百兆)可能 最多1个小时就处理完了.但是对于千万级数据可能几天,甚至更多. 那么问题来了,如何优化?? 第一步 解决读取的问题 跟数据库打交道的方式有很多,我来列举下吧: 1. [重武器-坦克大炮]使用重型ORM框架,比如 EF,NHibernat

  • C#使用SQL DataAdapter数据适配代码实例

    数据适配 DataAdapter 对象是DataSet 和数据源之间的桥梁,可以建立并初始化数据表(即DataTable),对数据源执行SQL指令.与DataSet 对象结合,提供DataSet对象存取数据源执行SQL指令,与Dataset对象结合,提供Dataset对象存取数据,可视为Data对象操作核心. 在使用DataAdapter对象是,只需要设置SQL命令和数据库连接两个参数,就可以铜火锅Fill方法把查询结果放置在一个DataSet对象中: 实例 : 填充DataSet数据集:利用D

  • C#如何在海量数据下的高效读取写入MySQL

    前提 由于工作的原因,经常需要对海量数据进行处理,做的数据爬虫相关,动辄千万级别的数据,单表几十个G都是都是家常便饭.  主要开发语言是C#,数据库使用的是MySQL. 最常见的操作便是 select 读取数据,然后在C#中对数据进行处理, 完毕后再插入数据库中.  简而言之就 select -> process -> insert三个步骤. 对于数据量小的情况下(百万级别 or 几百兆)可能最多1个小时就处理完了.但是对于千万级数据可能几天,甚至更多. 那么问题来了,如何优化?? (数据库的

  • C#操作SQLite数据库方法小结(创建,连接,插入,查询,删除等)

    本文实例讲述了C#操作SQLite数据库方法.分享给大家供大家参考,具体如下: SQLite介绍 SQLite is a software library that implements a self-contained, serverless, zero-configuration, transactional SQL database engine. SQLite是一个开源.免费的小型RDBMS(关系型数据库),能独立运行.无服务器.零配置.支持事物,用C实现,内存占用较小,支持绝大数的SQ

  • 详解C#批量插入数据到Sqlserver中的四种方式

    本篇,我将来讲解一下在Sqlserver中批量插入数据. 先创建一个用来测试的数据库和表,为了让插入数据更快,表中主键采用的是GUID,表中没有创建任何索引.GUID必然是比自增长要快的,因为你生成一个GUID算法所花的时间肯定比你从数据表中重新查询上一条记录的ID的值然后再进行加1运算要少.而如果存在索引的情况下,每次插入记录都会进行索引重建,这是非常耗性能的.如果表中无可避免的存在索引,我们可以通过先删除索引,然后批量插入,最后再重建索引的方式来提高效率. create database C

随机推荐