中.国.站.长.站
| 以下为引用的内容: Sub Collect() Www_Chinaz_com Dim rs As New Recordset 中.国.站.长.站 rs.ActiveConnection = "…" [中国站长站] rs.Source = "一条SQL查询语句" 中国站.长站 rs.Open Chinaz^com Debug.Print rs.Collect(0), rs.Collect(1), rs.Collect(2) 中.国站长站 Debug.Print rs!au_id, rs!au_fname, rs!au_lname Www_Chinaz_com End Sub Chinaz |
只查询你所需要的数据 站长.站
尽管很多开发人员都习惯采用"SELECT * FROM TBL"的模式进行查询,但是为了提高系统的效率,如果你只需要其中某几个字段的值的话,最好把这几个字段直接写出来,同时需要限定返回记录集的范围(通过WHERE子句进行限定)
Www^Chinaz^com
正确选择游标的位置、类型和锁方式
Chinaz_com
如果你只需要按顺序读取记录并且不需要滚动和更新记录的话,使用服务器端游标(adUseServer)、仅向前游标(adOpenForwardOnly)和读锁(adLockReadOnly)可以使你获得最好的性能。如果你需要滚动记录的话,采用客户端游标(adUseServer)会比采用服务器端游标所得到的性能要好,ADO系统默认是采用服务器端游标类型的。当然如果数据集合相当大的话,采用服务器端游标的性能会好一些。同时需要注意的话,如果采用客户端游标的话,最好只采用读加锁(adLockReadOnly)的锁类型,因为如果你需要更新数据的话,客户端游标引擎需要得到额外的信息(元数据),而这个信息的获取是非常昂贵的。
Www.Chinaz.com
调整记录集对象(Recordset)CacheSize的属性 站.长.站
ADO使用记录集对象的CacheSize的属性来决定提取和缓存的记录的数目,当你在缓存的范围内浏览数据的话,ADO就只从缓存中提取数据。当你要浏览的数据超出缓存的范围的时候,ADO就释放缓存,提取下一些记录(提取的数目为CacheSize的大小)。你必须根据你具体的应用程序的情况来设定CacheSize的大小保证你得到最好的性能。 Www_Chinaz_com
自己定义command对象的参数 Chinaz@com
在许多数据源中,得到参数信息和执行命令的代价几乎是一样的,所以如果可能的话,你要自己在程序中定义好command参数(也就是说要定义好参数的名称、类型和方向信息),而避免从数据提供者(Provider)那里获取信息. Chinaz.com
使用原始的OLE DB提供者 Www~Chinaz~com
MDAC对许多数据源提供了原始的数据提供者,比如SQL Server,Oracle和ACCESS数据库,这样你不需要再通过ODBC来获取数据(也就是说不需要再通过ODBC驱动这一层),这样的好处是你能更快的得到数据,并且降低磁盘和内存的开销。
中国站长_站,为中文网站提供动力
如果使用客户端游标的话,断开connection连接
Chinaz@com
ADO有一个特征是当使用客户端游标操作Recordset记录集的时候,不需要和服务器进行联系。你可以充分利用这个特征降低服务器端的开销(服务器就不需要维护这些连接了),当你操作完记录集需要更新的话,可以重新和数据库进行连接来更新数据。为了创建一个可以断开连接的记录集,你同时也需要使用静态游标(adOpenStatic)和批处理的加锁模式(adLockBatchOptimistic)。下面的示例是用VC写的:
| 以下为引用的内容: …… Chinaz^com pRs.CreateInstance(__uuid(Recordset)); Chinaz_com pRs->CursorLoction=adUseClient; Chinaz pRs->Open(strCmdText,strConnection,adOpenStatic,adLockBatchOptimistic,adCmdText); 中国站.长站 pRs->PutRefActiveConnection(NULL); Chinaz@com file://这里可以对记录集对象pRs进行操作 Chinaz~com pRs->PutRefAxctiveConnection(pCon); file://重新和数据库建立连接 中.国.站.长.站 pRs->UpdateBatch(adAffectAll); file://批量更新数据 Chinaz~com |
