数据库应用程序需注意的问题

作者:凯旋网络来源:凯旋网络
一个字段的值而不需要获得关于一个字段的引用。可以参考如下的示例代码:

中.国.站.长.站

以下为引用的内容:

  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

以下为引用的内容:

……

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

  • 广告推荐