OleDbDataReader快速数据读取方式

查询得到OleDbDataReader后,有三种方式支持数据读取,如下:

//方法一**速度中等
OleDbDataReader reader = command.ExecuteReader();
while (reader.Read())
{
    var t1 = reader[0];
}

//方法二**速度最慢
OleDbDataReader reader = command.ExecuteReader();
while (reader.Read())
{
    var t1 = reader["字段名"];
}

//方法三**速度最快
OleDbDataReader reader = command.ExecuteReader();
while (reader.Read())
{
    var t1 = reader.GetValue(0);
}

关于速度的描述,下面我们来简单验证一下。

有一个数据库,数据库中的表TEST有105945行数据,设计一个循环读取来测试他们的读取速度。

测试源码如下:

 static void Main(string[] args)
        {
            string connstr = string.Format("Provider=Microsoft.Jet.OLEDB.4.0 ;Data Source={0};", "F:\\2.mdb");
            string s1 = "ID";
            string s2 = "探测号";
            string s3 = "X";
            string s4 = "Y";
            string s5 = "H";
            string sql = string.Format("SELECT {0},{1},{2},{3},{4} FROM 管点表", s1, s2, s3, s4, s5);
            TimeSpan time1 = new TimeSpan();
            TimeSpan time2 = new TimeSpan();
            TimeSpan time3 = new TimeSpan();

            int count = 50;

            //数据库中查询的表有105945行
            for (int i = 0; i < count; i++)
            {
                using (OleDbConnection conn = new OleDbConnection(connstr))
                {
                    #region
                    conn.Open();
                    OleDbCommand command = conn.CreateCommand();
                    command.CommandText = sql;
                    OleDbDataReader reader = command.ExecuteReader();
                    DateTime now = DateTime.Now;
                    while (reader.Read())
                    {
                        var t1 = reader[0]; var t2 = reader[1]; var t3 = reader[2]; var t4 = reader[3]; var t5 = reader[4];
                    }
                    time1 = time1 + (DateTime.Now - now);
                    #endregion
                }
            }
            for (int i = 0; i < count; i++)
            {
                using (OleDbConnection conn = new OleDbConnection(connstr))
                {
                    #region
                    conn.Open();

                    OleDbCommand command2 = conn.CreateCommand();
                    command2.CommandText = sql;
                    OleDbDataReader reader = command2.ExecuteReader();
                    DateTime now = DateTime.Now;
                    while (reader.Read())
                    {
                        var t1 = reader[s1]; var t2 = reader[s2]; var t3 = reader[s3]; var t4 = reader[s4]; var t5 = reader[s5];
                    }
                    time2 = time2 + (DateTime.Now - now);
                    #endregion
                }
            }
            for (int i = 0; i < count; i++)
            {
                using (OleDbConnection conn = new OleDbConnection(connstr))
                {
                    #region
                    conn.Open();

                    OleDbCommand command3 = conn.CreateCommand();
                    command3.CommandText = sql;
                    OleDbDataReader reader = command3.ExecuteReader();
                    DateTime now = DateTime.Now;
                    while (reader.Read())
                    {
                        var t1 = reader.GetValue(0); var t2 = reader.GetValue(1); var t3 = reader.GetValue(2); var t4 = reader.GetValue(3); var t5 = reader.GetValue(4);
                    }
                    time3 = time3 + (DateTime.Now - now);
                    #endregion
                }
            }
            Console.WriteLine(string.Format("方法一:\r\n耗时:{0}s", time1.TotalSeconds));
            Console.WriteLine(string.Format("方法二:\r\n耗时:{0}s", time2.TotalSeconds));
            Console.WriteLine(string.Format("方法三:\r\n耗时:{0}s", time3.TotalSeconds));
            Console.ReadKey();
        }

循环50次结果,即50*105945:

100次循环结果:,即100*105945:

时间: 2024-10-28 10:09:05

OleDbDataReader快速数据读取方式的相关文章

MYSQL 的数据读取方式

例子: create table T(X bit(8)); insert into T (X) values(b'11111111'); select X from T; 这个时候会发现这个X 是乱码的,不要当心真正的数据是已经存入了的.只是你的打开方式不对. 如果要用二进制的方式来看的话可以这样 select bin(X) from T; 同理:oct(X) 以八进制的方式来看          hex(X)以16进制的方式来看   X+0 以10进制的方式来看

node readable stream 数据读取方式

A Readable stream will not start emitting data until you indicate that you are ready to receive it. Readable streams have two "modes": a flowing mode and a paused mode. When in flowing mode, data is read from the underlying system and provided t

Java中9种IO的读取方式

数据的读写,按照数据类型可以分为两种:字符流和字节流(二者区别?).所以数据读取方式按照数据类型也可以分为两类:字节流的读取和字符流的读取. 一.字节流读取操作: | | |-----1.FileInputStrem和FileInputStream字节流逐字节读写(速度最慢) | | |-----2.FileInputStrem和FileInputStream构造一个缓冲数组进行读写(速度提升) | |-----3.利用字节缓冲区流BufferedInputStream和BufferedOutp

『TensorFlow』数据读取类_data.Dataset

一.资料 参考原文: TensorFlow全新的数据读取方式:Dataset API入门教程 API接口简介: TensorFlow的数据集 二.背景 注意,在TensorFlow 1.3中,Dataset API是放在contrib包中的: tf.contrib.data.Dataset 而在TensorFlow 1.4中,Dataset API已经从contrib包中移除,变成了核心API的一员: tf.data.Dataset 此前,在TensorFlow中读取数据一般有两种方法: 使用p

net快速写入/读取大量数据Postgresql

Postgresql快速写入/读取大量数据 http://www.cnblogs.com/podolski/p/7152144.html 环境及测试 使用.net驱动npgsql连接post数据库.配置:win10 x64, i5-4590, 16G DDR3, SSD 850EVO. postgresql 9.6.3,数据库与数据都安装在SSD上,默认配置,无扩展. CREATE TABLE public.mesh ( x integer NOT NULL, y integer NOT NUL

大数据技术之_19_Spark学习_02_Spark Core 应用解析+ RDD 概念 + RDD 编程 + 键值对 RDD + 数据读取与保存主要方式 + RDD 编程进阶 + Spark Core 实例练习

第1章 RDD 概念1.1 RDD 为什么会产生1.2 RDD 概述1.2.1 什么是 RDD1.2.2 RDD 的属性1.3 RDD 弹性1.4 RDD 特点1.4.1 分区1.4.2 只读1.4.3 依赖1.4.4 缓存1.4.5 CheckPoint第2章 RDD 编程2.1 RDD 编程模型2.2 RDD 创建2.2.1 由一个已经存在的 Scala 集合创建,即集合并行化(测试用)2.2.2 由外部存储系统的数据集创建(开发用)2.3 RDD 编程2.3.1 Transformatio

sas数据读取详解 四种读取数据方式以及数据指针的位置 、读取mess data的两个小工具、特殊的读取技巧、infile语句及其选项(dsd dlm missover truncover obs firstobs)、proc import、自定义缺失值

(The record length is the number of characters, including spaces, in a data line.) If your data lines are long, and it looks like SAS is not reading all your data, then use the LRECL= option in the INFILE statement to specify a record length at least

PHP 数据库驱动、连接数据不同方式学习笔记

相关学习资料 http://www.php.net/manual/zh/refs.database.php http://www.php.net/manual/zh/internals2.pdo.php http://bbs.phpchina.com/thread-184537-1-1.html http://www.metsky.com/archives/660.html http://www.phpbuilder.com/ http://www.w3school.com.cn/php/php

Oracle性能分析6:数据访问方式之索引扫描

这节将介绍各种索引扫描方式,在了解了各种索引扫描方式的特点后,你就可以判断你的执行计划中使用的扫描方式是否正确,并可以针对获取的信息作出改进. 索引唯一扫描 在下面的场景中使用相等条件时,数据库使用索引唯一扫描. 1)查询条件中包含唯一索引中的所有列时: 2)查询条件使用主键约束列时. 下面是一个实际的例子,在表historyalarm中创建如下唯一索引: create unique index idx_historyalarm$queryid on historyalarm(queryid)