全面总结ADO.NET DataReader使用技巧

开发 后端
这里究ADO.NET DataReader使用技巧做了总结和常见问题的解答,文章还对用 DataReader 检索二进制大对象 (BLOB) 应该怎么做出了讲解。

经常上网收集资料,自己看多了也能总结出一些东西,在这里究一些使用ADO.NET DataReader 获得***性能的技巧来说谁,同时还回答了一些关于使用ADO.NET DataReader的常见问题。

◆在访问相关 Command 的任何输出参数之前,必须关闭 DataReader。
◆完成读数据之后总是要关闭 DataReader。如果使用 Connection 只是用于返回 DataReader,那么关闭 DataReader 之后立刻关闭它。
另外一个显式关闭 Connection 的方法是把 CommandBehavior.CloseConnection 传递给 ExecuteReader 方法,以确保相关的连接在关闭 ADO.NET DataReader 时被关闭。如果从一个方法返回DataReader,而且不能控制 DataReader 或相关连接的关闭,则这样做特别有用。
◆不能在层之间远程访问 DataReader。DataReader 是为已连接好的数据访问设计的。
◆当访问列数据时,使用类型化访问器,例如,GetString、GetInt32 等。这使您不用进行将 GetValue 返回的 Object 强制转换成特定类型所需的处理。
◆一个单一连接每次只能打开一个 DataReader。在 ADO 中,如果打开一个单一连接,并且请求两个使用只进、只读游标的记录集,那么 ADO 会在游标生存期内隐式打开第二个、未池化的到数据存储区的连接,然后再隐式关闭该连接。对于 ADO.NET,“秘密”完成的动作很少。如果想在相同的数据存储区上同时打开两个 DataReaders,就必须显式创建两个连接,每个 DataReader 一个。这是 ADO.NET 为池化连接的使用提供更多控制的一种方法。
◆ExecuteReader 调用。这将 DataReader 的默认行为更改为仅在请求时将数据加载到内存。注意,CommandBehavior.SequentialAccess 要求顺序访问返回的列。也就是说,一旦读过返回的列,就不能再读它的值了。
◆如果已经完成读取来自 DataReader 的数据,但仍然有大量挂起的未读结果,就在调用 DataReader 的 Close 之前先调用 Command 的 Cancel。调用 DataReader 的 Close 会导致在关闭游标之前检索挂起的结果并清空流。调用 Command 的 Cancel 会放弃服务器上的结果,这样,DataReader 在关闭的时候就不必读这些结果。如果要从 Command 返回输出参数,还要调用 Cancel 放弃它们。如果需要读取任何输出参数,不要调用 Command 的 Cancel,只要调用 DataReader 的 Close 即可。
 

二进制大对象 (BLOB)

用 DataReader 检索二进制大对象 (BLOB) 时,应该把 CommandBehavior.SequentialAccess 传递给 ExecuteReader 方法调用。因为 DataReader 的默认行为是每次 Read 都把整行加载到内存,又因为 BLOB 值可能非常大,所以结果可能由于单个 BLOB 而使大量内存被用光。SequentialAccess 将 DataReader 的行为设置为只加载请求的数据。然后还可以使用 GetBytes 或 GetChars 控制每次加载多少数据。

记住,使用 SequentialAccess 时,不能不按顺序访问 DataReader 返回的不同字段。也就是说,如果查询返回三列,其中第三列是 BLOB,并且想访问前两列中的数据,就必须在访问 BLOB 数据之前先访问***列的值,然后访问第二列的值。这是因为现在数据是顺序返回的,并且 DataReader 一旦读过该数据,该数据就不再可用。

【编辑推荐】

  1. 详谈Linq查询结果分析的方法
  2. 简简单单学习Linq查询语法
  3. 详细阐述Linq插入数据的操作方法
  4. 浅析Linq插入数据的实现方法
  5. 简单解决Linq多条件组合问题
责任编辑:田树 来源: 博客
相关推荐

2009-11-04 12:45:33

ADO.NET Dat

2009-11-13 10:31:07

ADO.NET Dat

2009-11-04 16:55:16

ADO.NET Dat

2009-10-29 10:34:31

ADO.NET使用技巧

2009-12-22 16:35:11

ADO.NET控件

2009-10-29 10:44:18

ADO.NET Dat

2009-11-12 14:37:26

ADO.NET结构

2009-12-28 15:46:22

ADO.NET操作

2009-11-03 17:25:59

ADO.NET编程技巧

2009-11-13 09:24:17

2009-10-29 13:34:01

ADO.NET对象

2009-12-21 14:39:09

ADO.NET技巧

2009-11-12 12:39:16

ADO.NET Sta

2009-12-31 11:11:42

ADO.NET组件

2009-11-13 10:53:54

ADO.NET Dat

2009-12-21 13:19:34

ADO.NET组件

2009-11-11 14:27:32

ADO.NET函数

2009-10-29 10:10:10

ADO.NET数据集类

2009-12-23 17:30:54

ADO.NET应用程序

2009-12-24 14:45:32

ADO.NET程序
点赞
收藏

51CTO技术栈公众号