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

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

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

有一个数据库,数据库中的表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 = ; //数据库中查询的表有105945行
for (int i = ; 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[]; var t2 = reader[]; var t3 = reader[]; var t4 = reader[]; var t5 = reader[];
}
time1 = time1 + (DateTime.Now - now);
#endregion
}
}
for (int i = ; 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 = ; 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(); var t2 = reader.GetValue(); var t3 = reader.GetValue(); var t4 = reader.GetValue(); var t5 = reader.GetValue();
}
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:

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

  1. geotrellis使用(二)geotrellis-chatta-demo以及geotrellis框架数据读取方式初探

    在上篇博客(geotrellis使用初探)中简单介绍了geotrellis-chatta-demo的大致工作流程,但是有一个重要的问题就是此demo如何调取数据进行瓦片切割分析处理等并未说明,经过几天 ...

  2. XML数据读取方式性能比较(一)

    原文:XML数据读取方式性能比较(一) 几个月来,疑被SOA,一直在和XML操作打交道,SQL差不多又忘光了.现在已经知道,至少有四种常用人XML数据操作方式(好像Java差不多),不过还没有实际比较 ...

  3. TensorFlow数据读取方式:Dataset API

    英文详细版参考:https://www.cnblogs.com/jins-note/p/10243716.html Dataset API是TensorFlow 1.3版本中引入的一个新的模块,主要服 ...

  4. XML教程、语法手册、数据读取方式大全

    XML简单易懂教程 本文提供全流程,中文翻译.Chinar坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) 一 XML --数据格式的写法 二 Re ...

  5. MYSQL 的数据读取方式

    例子: create table T(X bit(8)); insert into T (X) values(b'11111111'); select X from T; 这个时候会发现这个X 是乱码 ...

  6. TensorFlow全新的数据读取方式:Dataset API入门教程

    TensorFlow.data : http://tech.ifeng.com/a/20171109/44752505_0.shtml Pytorch:https://ptorch.com/docs/ ...

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

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

  8. Java中9种IO的读取方式

    数据的读写,按照数据类型可以分为两种:字符流和字节流(二者区别?).所以数据读取方式按照数据类型也可以分为两类:字节流的读取和字符流的读取. 一.字节流读取操作: |  | |-----1.FileI ...

  9. Tensorflow学习-数据读取

    Tensorflow数据读取方式主要包括以下三种 Preloaded data:预加载数据 Feeding: 通过Python代码读取或者产生数据,然后给后端 Reading from file: 通 ...

随机推荐

  1. 原型设计Axure的基本使用

    Axure是一款专业的原型设计工具, 让负责定义需求设计:功能和界面的人员能快速设计出所需产品,其中不仅包含了对软件产品的界面,交互逻辑的原型设计,还包含了流程图:web网站的线框图,并且能导出说明文 ...

  2. 关于mysql字段时间类型timestamp默认值为当前时间问题

    今天把应用部署到AWS上发现后台修改内容提交后程序报错,经过排查发现是更新数据的时候,有张数据表中的一个timestamp类型的字段默认值变成了"0000-00-00 00:00:00.00 ...

  3. JavaScript学习总结——我所理解的JavaScript闭包

    一.闭包(Closure) 1.1.什么是闭包? 理解闭包概念: a.闭包是指有权限访问另一个函数作用域的变量的函数,创建闭包的常见方式就是在一个函数内部创建另一个函数,也就是创建一个内部函数,创建一 ...

  4. Angular的自定义指令以及实例

    本文章已收录于:  AngularJS知识库  分类: javascript(55)  http://www.cnblogs.com/xiaoxie53/p/5058198.html   前面的文章介 ...

  5. 深刻理解:C#中的委托、事件

    C#中的事件还真是有点绕啊,以前用JavaScript的我,理解起来还真是废了好大劲!刚开始还真有点想不明白为什么这么绕,想想和JS的区别,最后终于恍然大悟! C#中事件绕的根本原因: C#的方法,它 ...

  6. TileJSON

    TileJSON TileJSON is an open standard for representing map metadata. License The text of this specif ...

  7. CentOS7系统安装及初始化

    1.运行VirtualBox5. 2.安装CentOS7系统. 注意:选择Basic Server类型 安装过程略. 3.修改计算机IP和计算机名. 1)nmtui 1.修改主机名: nmcli ge ...

  8. H5 表格标签的其它标签

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...

  9. Hadoop集群的启动顺序

    1.启动zookeeper集群 对于hadoop,使用Zookeeper的事件处理确保整个集群只有一个活跃的NameNode,存储配置信息,对于HBase,使用Zookeeper的事件处理确保整个集群 ...

  10. MySQL 常用命令总结

    http://blog.csdn.net/hanxin1987216/article/details/5976860 一.总结 1.Linux系统下启动MySQL的命令: mysqladmin sta ...