Recordset,大家都用,不过是否真正理解呢?下面,我就简单说说这个对象(主要
是说说游标类型和位置这两个有点难度的地方)
游标位置,有两个,一个是服务器游标,一个是客户端游标。
服务器游标是放在数据存储(指数据存放的容器,包括数据库,所以下面就以数据
库为例)上的,所以它是依赖于数据存储的,实际上是让数据存储本身的游标来管
理数据,并不是所有的数据存储都可以使用服务器游标,如access就不行,因为
它本身并不支持游标,只能用客户端游标。
客户端游标是放在调用的应用程序上的,由Ado本身来管理,与服务器游标相比,
由于要将整个数据都放到应用程序上,因此速度相对有点慢,但仅仅是一次加载
,而服务器游标是每次移动都加载一行(仅向前游标比较特殊,不论是服务器游标
还是客户端游标,对于他来说都是一样,这个下面会讲到),客户端游标支持仅向
前游标和静态游标两种。
游标类型分为四种:仅向前游标,静态游标,集键游标,动态游标
1,仅向前游标
个人认为这个类型其实最难理解了,因为很多书都没有谈到,当初我学的时候也
是反复研究后才搞明白的,这个类型不论是服务器游标还是客户端游标,所做的
动作完全一样,都是一次性将数据从数据存储上取出放到应用程序里的缓存里,
接下来所作的如移动等动作,完全和数据存储无关,这以后所有对数据存储本身
的改变对于它来说都不可见,全部是Ado本身来操作,每次移动movenext,都是从
缓存里取出一行,这时,如果进行更新(游标锁类型允许的话),每次都是生成相
应的sql语句,发送给数据存储进行操作,如addnew,这时就会发送相应的insert
into语句
2,静态游标
这个类型在两种游标位置下,表现形式不一样,
在服务器游标下,数据存储查询出相应结果集后,会在数据存储里产生临时环境(
如数据库的临时表)存放,这样当查询完后,任何对数据存储本身的改变都不会影
响到它,因为它是一个副本,所以,静态游标对于这以后的别的用户的所有改变
都不可见。
在客户端游标下,所有动作和仅向前游标一样,仅仅在于它是可以前后自由移动
的,而仅向前游标只能向前移动
再谈谈在该类型下的数据更新,同样在两种游标位置下,是不一样的
在服务器游标下,所有更新都是通过数据存储本身的游标管理来更新的,如
sqlserver,是通过cursor本身来更新数据的
而在客户端游标下,则和仅向前游标一样,是通过发送相应sql语句来完成的
3,集键游标
这个类型只能存在于服务器游标下,和静态游标一样,也会存放在数据存储的临
时环境里,区别在于仅仅存放键值,因此,性能方面比静态游标稍快,同时,也
因为存放的只是键值,需要根据键值察看相应的行,所以它可以看见修改删除的
变化(新增的看不到),在该类型下的数据更新也是完全由数据存储本身的游标管
理来更新的
4,动态游标
同集键游标一样,只能存在于服务器游标下,由于直接是查询结果的游标,所以
,所有用户对该查询结果作的更新,都会直接反映出来,因此,动态游标可以看
到一切更新,在该类型下的数据更新也是完全由数据存储本身的游标管理来更新
的,至于为什么说该类型消耗资源最大,那是因为锁的原因,每次移动都要维持
一个共享锁,这个由于篇幅有限,在这里就不说了
通过上面说的,可以看到,在Ado里,Recordset其实是很复杂的,所以,在
Ado.net里,微软就取消的这个东西,也可以说是将它分解了,当然Ado本质是个
谈谈Ado中的Recordset
原创文章如转载,请注明:转载自悠悠博客 [ http://www.ajaxstu.com/ ]
相关文章:
- AOD connection属性:CursorLocation DefaultDatabase IsolationLevel Provider(2007-9-27 1:31:3)
- 创建 Recordset 的快捷方式(2007-9-8 11:2:30)
- 返回 ADO 的版本号(2007-8-23 6:56:17)
- 通过脚本语言使用 ADO(2007-5-25 9:19:48)
- ADO:Stream 对象(2007-4-13 8:21:11)
- 通过 ADO 使用提供者(2007-3-13 2:37:3)
- ADO connection 对象 :open和close方法(2007-3-11 9:28:30)
- 绝对和相对 URL(2007-3-8 6:2:15)
- ADO connection 对象包含的内容(2007-1-26 10:55:29)
- ADO 对象模型目录(2006-11-6 6:37:2)
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。