日期:2014-05-16  浏览次数:21003 次

ADO访问Access的问题
VC中用ADO访问Access数据库,为什么把Recordset的CursorLocation属性设成adUseClient和adUseServer时,数据库的存储速度相差那么大啊。

设成aduseclient时,存四万条数据要将近三分钟,而设成aduseserver时只需要十几秒。

哪个高手能够详细介绍一下这个属性吗,应该怎么选择呢。

看了好几本书上的介绍都是直接翻译的msdn的,看了也没什么长进。

------解决方案--------------------
参考:

1、当用select语句查询数据库后,数据库将返回一个记录集作为查询结果
a) 如果CursorLocation = adUseServer,那么查询结果将不被返回到客户端,而是存在于数据库服务器的内存空间中
b) 如果CursorLocation = adUseClient,那么查询结果将被返回到客户端程序的内存空间

2、根据两种CursorLocation的存在位置不一样,所以两种记录集有以下不同点:
a) 如果是adUseServer,那么每一次移动游标的操作都需要与服务器进行通信,这带来:
i) 慢,因为要与服务器通信
ii) 加重服务器负担
所以需要频繁移动游标的时候最好不要使用服务器游标
b) 如果是adUseClient,那么在查询结束后所有结果都会被返回到客户端,这带来:
i) 如果查询结果数据量大,那么下面的执行步骤要等待数据传输完毕,这可能使程序停顿;
ii) 客户端内存消耗加大;
iii) 移动游标都是在客户端进行的,速度快;
iv) 因为结果都返回到了客户端,所以这时候数据库连接就不需要了,所以可以及早断开与数据库服务器的连接,节省开销
v) 客户端记录集有更多的特性可以使用,比如RecordCount等

注:以上提到的客户端不是指IE浏览器,而是ASP程序,它的内存空间就是IIS。