服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - C# - C# OleDbDataReader快速数据读取方式(3种)

C# OleDbDataReader快速数据读取方式(3种)

2022-08-11 09:39DullFish C#

这篇文章主要介绍了C# OleDbDataReader快速数据读取方式(3种),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
//方法一**速度中等
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行数据,设计一个循环读取来测试他们的读取速度。

测试源码如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
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:

C# OleDbDataReader快速数据读取方式(3种)

C# OleDbDataReader快速数据读取方式(3种)

C# OleDbDataReader快速数据读取方式(3种)

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

C# OleDbDataReader快速数据读取方式(3种)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。

原文链接:https://www.cnblogs.com/dullfish/p/6214983.html

延伸 · 阅读

精彩推荐
  • C#Unity3D使用右键菜单打开工程

    Unity3D使用右键菜单打开工程

    这篇文章主要为大家详细介绍了Unity3D使用右键菜单打开工程的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    星空不语5372022-07-08
  • C#string类的使用方法详解

    string类的使用方法详解

    本文主要为大家介绍C#中string类的使用方法详解,具有一定的参考价值,有需要得朋友可以参考下...

    C#教程网2382020-12-15
  • C#C#计算器编写代码

    C#计算器编写代码

    这篇文章主要为大家分享了C#计算器编写代码,供大家参考,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    yongh7019872021-11-30
  • C#C#生成注册码的实例代码

    C#生成注册码的实例代码

    C#生成注册码的实例代码,下面是一个小例子,需要的朋友可以参考一下...

    C#教程网5592020-12-18
  • C#WPF实现类似360安全卫士界面的程序源码分享

    WPF实现类似360安全卫士界面的程序源码分享

    最近在网上看到了新版的360安全卫士,感觉界面还不错,于是用WPF制作了一个,时间有限,一些具体的控件没有制作,用图片代替了。感兴趣的朋友一起跟...

    JackWang-CUMT11622021-10-27
  • C#C# 使用WPF 用MediaElement控件实现视频循环播放

    C# 使用WPF 用MediaElement控件实现视频循环播放

    在WPF里用MediaElement控件,实现一个循环播放单一视频的程序,同时可以控制视频的播放、暂停、停止。这篇文章给大家介绍了C# 使用WPF 用MediaElement控件实现...

    C#教程网8832022-02-23
  • C#C#减少垃圾回收压力的字符串操作详解

    C#减少垃圾回收压力的字符串操作详解

    这篇文章给大家详细分析了C#减少垃圾回收压力的字符串操作的相关知识点,有兴趣的朋友参考学习下吧。...

    衣舞晨风7742022-02-20
  • C#c#实现一个超实用的证件照换底色小工具(附源码)

    c#实现一个超实用的证件照换底色小工具(附源码)

    这篇文章主要给大家介绍了关于利用c#实现一个超实用的证件照换底色小工具的相关资料,通过这个小工具大家可以很方便的进行底色的切换,不用再因为...

    ATtuing11042022-02-19