查询得到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:
100次循环结果:,即100*105945:
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。
原文链接:https://www.cnblogs.com/dullfish/p/6214983.html