查询得到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. Java注解

    Java注解其实是代码里的特殊标记,使用其他工具可以对其进行处理.注解是一种元数据,起到了描述.配置的作用,生成文档,所有的注解都隐式地扩展自java.lang.annotation.Annotati ...

  2. offset、client、scroll开头的属性归纳总结

    HTML元素有几个offset.client.scroll开头的属性,总是让人摸不着头脑.在书中看到记下来,分享给需要的小伙伴.主要是以下几个属性: 第一组:offsetWidth,offsetHei ...

  3. [连载]《C#通讯(串口和网络)框架的设计与实现》- 6.通讯控制器的设计

    目       录 第六章           通讯控制器的设计... 2 6.1           控制器接口... 2 6.2           串口控制器... 3 6.3          ...

  4. GJM :Unity使用EasyAR实现脱卡功能

    首先说下大致思路当卡片离开摄像头时间,ImageTarget-Image的SetActive (false),所以其子物体(model)也就不显示了,因此解决的办法就是在Target (false)时 ...

  5. quartz CronExpression表达式

    一个cron表达式有至少6个(也可能7个)有空格分隔的时间元素.按顺序依次为1.秒(0~59)2.分钟(0~59)3.小时(0~23)4.天(月)(0~31,但是你需要考虑你月的天数)5.月(0~11 ...

  6. java接口调用——webservice就是一个RPC而已

    很多新手一听到接口就蒙逼,不知道接口是什么!其实接口就是RPC,通过远程访问别的程序提供的方法,然后获得该方法执行的接口,而不需要在本地执行该方法.就是本地方法调用的升级版而已,我明天会上一篇如何通过 ...

  7. java函数的笔记

    java中,函数即方法.也就是实现某个功能的办法. 函数的格式 修饰符 返回值类型 函数名(参数类型 参数) { 逻辑处理; return 处理结果; // return关键字是用于结束该函数的,并将 ...

  8. js picker webapp仿ios picker

    iosselect 在webapp下的一个picker组件 可以轻松实现各类选择器效果.比如地区选择 时间选择 日期选择等. 可以定制依赖关系,可以定制选择层级,可以定制高度 展示项数.无论你是px还 ...

  9. cookie存储对象信息

    最近看到某公司某项目中用于保存多个城市信息到cookie中的方法,该方法的逻辑是按时间顺序记录最近访问过的三个城市的名字及id,逻辑包插入与含排重.插入与排重的代码如下: 1 2 3 4 5 6 7 ...

  10. Atitit 软件国际化原理与概论

    Atitit 软件国际化原理与概论 语言和文化习俗因地域不同而差别很大.对某一特定的地域的 语言环境称为"locale".它不仅包括语言和货币单位,而且还包括 数字标示格式, 日期 ...