一个很值得大家讨论的问题:(关于ADO)快请进!)(100分)

瑞雪

Unregistered / Unconfirmed
GUEST, unregistred user!
李老师在<<Delphi 5.X ADO/MTS/COM+高级程序设计篇>>一书中对于两种CursorLocation是
这样描述的:
begin
1.Cursor-Side Cursor
所谓Client-Side Cursor是指Cursor维护在客户端机器的ADO缓存中,当Recordset对
象查询语句向数据源发出存取数据的命令之后,这些由数据源处理Recordset对象查询语句
之后取得的数据便会传送到客户端的ADO缓存中。接着这些数据由客户端的ADO Cursor来
控制以便让客户端应用程序存取这些数据

2.Server-Side Cursor
所谓Server-Side Cursor是指Cursor维护在数据源机器的ADO缓存中或由数据源本身
自行维护。当Recordset对象使用查询语句向数据源发出存取数据的命令之后,这些由数
据源处理Recordset对象查询语句之后取得的数据便会储存在数据源的ADO缓存中或储存在
数据源本身的缓存中,只把由Recordset对象指定的CacheSize大小的数据笔数传递回客
户端,例如,如果客户端应用程序中的Recordset对象的CacheSize为10,那么ADO引擎便
会把10笔数据传递回客户端的ADO引擎,并且储存在客户端的ADO缓存中让应用程序处理。
如果客户端应用程序要浏览第11笔数据,那么由于第11笔数据没有存在于客户端的ADO缓存
中,客户端的ADO Cursor引擎便会再向服务器端的ADO引擎要求传递下10笔数据。
End;

我的理解是这样的:
李老师在这个问题中只讲了CacheSize在Server-Side Cursor中的意义,而在
Client-Side Cursor中却只字未提(CacheSize)。如果根据CacheSize在Server-Side
Cursor中的意义来描述CacheSize在Client-Side Cursor中的意义,那么我会这样
理解:
begin
所谓Client-Side Cursor是指Cursor维护在客户端机器的ADO缓存中,当Recordset
对象查询语句向数据源发出存取数据的命令之后,这些由数据源处理Recordset对象查询
语句之后取得的数据便会[red](全部)[/red]传送到客户端的ADO缓存中。接着这些数据由客户端的
ADO Cursor来控制以便让客户端应用程序存取这些数据。
End;
我理解成了CacheSize在客户端Cursor的Recordset中没有任何意义。就是理解为:
无论CacheSize设置为多少,由数据源处理Recordset对象查询语句之后取得的数据都会
全部传送到客户端的ADO缓存中。但是,请大家注意这里:李老师又在第四章中(深入了
解ADO)讲道:
begin
5)在Client-Side Cursor中如果CacheSize设定为1,那么由于数据源只传递一笔
(如像和Server-Side Cursor一样只传递CacheSize指定的笔数)数据到客户端,因此不
但没有充分利用TDS Packet Size,而且当客户端应用程序浏览数据时,ADO引擎需要
再次向数据源要求取得下笔数据,因此非常没有效率。当我们稍为增加CacheSize之后,
这个情形可以很快获得改善。
end;
这不和Server-Side Cursor中的CacheSize一样吗?我想应该不像我理解的那样,
那么这个问题该怎么理解呢?
请大家来讨论讨论我哪里理解的不对,帮我改正一下。谢谢
 
顶部