ADO 光 标 基 础 (2)

2016-01-29 19:08 3 1 收藏

ADO 光 标 基 础 (2),ADO 光 标 基 础 (2)

【 tulaoshi.com - ASP 】

  在光标基础(1)中,主要讲述了什么是光标,什么是服务器光标,什么是客户光标。我们还把光标比作手,它的作用就是定位某条记录。

光标没有手那样灵活,而且要复杂的多。根据不同的需要,光标被划分为静态光标( Static ),键集光标( KeySet),动态光标( Dynamic ),前向光标( Forward-only )。在文章最后还要介绍有关默认结果集的概念。

1. 静态光标

静态光标为查询结果生成一个临时的拷贝并存储在 tempdb 中,你对结果集的所有操作,其实质是在一个私有的,临时的数据拷贝上进行的,这个结果集的成员是固定的,别人对基表所作的任何修改都不会实时的反映出来。

采用静态光标在服务器中创建临时表是要付出代价的。我们知道 tempdb 经常用于复杂的数据检索,如果结果集太大就会影响数据查询的效率。

2. 键集光标

与静态光标不同的就是键集光标只在 tempdb 中存储唯一标识结果集各行的关键值 -- 键集(比如:索引)。

假设我们要查询这样的语句 "SELECT Cust_name FROM customers WHERE cust_id 100",假定用户101,200,300符合查询条件。此后,每一次提取操作都会使用这些键值。换句话就是说,以后的 .Movenext 操作使服务器重新以键集为基础进行查找,即:"SELECT Cust_name FROM customers WHERE cust_id IN(101,200,300)"。即使其他人输入了用户400,它也不会出现在结果集中。而基于键集所作的修改是可以看到的。

对于键集光标,要求该光标用到的表都应有一个唯一索引,如果不满足这个条件,该光标会转换成静态光标。

3. 动态光标

在这种光标中,SELECT 语句在每次提取记录时都要执行一次。与键集光标不同,它执行的是原 SELECT 语句,即:"SELECT Cust_name FROM customers WHERE cust_id 100"。这就意味着动态光标的成员是不固定的,你在光标内所作的修改,或者其他人所作的修改,都会在下一次提取时反映出来。

说句题外话,有好多人问:为什么RecordSet.RecordCount 返回 -1?(-1 代表不知道有多少条记录,)其实好好想一下,不难得出结论。静态光标和键集光标的成员是固定的,自然可以知道到底有多少条记录,而动态光标却相反,它不可能返回一个随时变化的值。

4. 前向光标

顾名思义,只向前滚动的光标。这是 ADO 的缺省光标,通常从头到尾进行数据处理,即只沿着一个方向,所以每一行不会被重新提取。前向光标是最快的光标。

5. 默认的结果集

默认结果集就是那些未以光标形式返回的结果集。

它的另一个名称是 'firehose' ,这个词更形象的反映了默认结果集的工作方式:只要客户端不断的处理返回的记录,使网络缓冲区有空间发送更多的结果,那么服务器就会向客户端继续发出记录。客户端不向服务器发出请求,服务器仅是不断的向网络发送数据。

尽管我们把默认结果集看作是前向 / 只读的光标,但这仅仅是一种称呼,它确实同真正的光标不一样。我们可以使用光标这个词,但应明确:从 SQL Server 的角度来看,默认结果集不是一个光标,它不涉及服务器的光标服务。

默认结果集的效率通常比光标高。

 

来源:https://www.tulaoshi.com/n/20160129/1508525.html

延伸阅读
标签: 办公软件
    一般情况下,对于表格的标题我们都是采用居中的方式,在Excel中实现该功能是通过“合并和居中”命令,而不是通常的“居中”命令。     使标题跨列居中的执行步骤如下:     (1) 按照实际表格的最大宽度选择要跨列居中的标题,如图6-20所示。    ...
导 读:在ADO中我们最常使用的对象就Recordset了,而在ADO.NET中又增加了一个对象DataSet。本文简要的对比了DateSet和Recordset的异同,这对ADO.NET的初学者非常有帮助! 翻译整理:.net技术网(www.51dotnet.com)郜飞 原文出处:http://www.database-applications.net/articles/dotnet4.html Recordset是一个连接或断开的(通过使用游标)...
标签: 钓鱼
带饵调标的要点: 1.先找到实际水深。 2.调标时双饵要离底。 3.考虑钓饵溶散的因素。 4.调标时主线要入水。 空钩调标:也称空钩调标,除调标时不带饵外其它步骤方法同带饵调标相同。  
当转为使用ADO.NET时,您将需要了解如何应对以前知道用ADO处理而现在必须用ADO.NET解决的场景。就像使用Visual Basic、C++和ASP开发的N层解决方案经常要依赖ADO来满足数据访问需要一样,Windows?窗体、Web窗体和Web服务也要依赖ADO.NET。我曾经从使用传统ADO开发的角度讨论了如何使用ADO.NET来处理一些数据访问的场景。其中的一些主题包括将行...

经验教程

534

收藏

44
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部