asp中ADO的优化

转载 2006年05月17日 09:18:00

1 Connection

1.1 Pooling

  在Web Application中,常常会出现同时有很多用户同时访问数据库的情况,而且ASP中的对象作用域是页面级的,也就是说,每个页面都要联接和断开数据库,岂不是会很慢?而且每个到SQL Server数据库的联接会带来37k的系统开销,怎么办?

  可能有人会想到用Application和Session来解决问题,但是,这是不可取的,如果用Application,那么会出现多个用户同时通过一个Connection访问数据库的情况,虽然节省了建立连接的时间,但是访问数据库的速度就会变得非常慢。如果用Session,出现的问题就是,Session超时怎么办?如果把Session.Timeout设得很大,那用户离开之后,连接还会保留一段时间,也会带来额外的开销。

  其实根本不用考虑这个问题,通过OLE DB访问数据库,它会替你解决这个问题,OLE DB有一个Resource Pooling,它会代理你的连接请求,然后把别人刚用过的连接给你接着用。(具体机制不再阐述,其实我也没搞太明白,嘻嘻)

1.2 Provider

  可能没有多少人用过这个Property吧,它的缺省值是MSDASQL,还有MSIDXS和ADSDSOObject,但是在ADO2.0(见VS98)和ADO2.1(见SQL7)里面提供了一些新的Provider:

MSDAORA (OLE DB Provider for Oracle)

Microsoft.Jet.OLEDB.3.51(OLE DB Provider for Microsoft Jet( for ACCESS))

SQLOLEDB(Microsoft SQL Server OLE DB Provider)

  如果你所用的数据库是这些的话,用这些新的Provider就可以不通过ODBC而直接访问数据库,提高的效率就可想而知了。

2 Command

2.1 CommandType

  缺省值是adCmdUnknown,ADO会逐个判断你的CommandType,直到它认为合适为止,不建议采用。(在Recordset.Open和Connection.Execute的时候也可以用)

  adCmdText是照原样执行你的SQL语句,但是如果你的SQL Language是以下几种的话,通过使用别的CommandType就可以提高你的SQL语句执行效率

objCmd.Execute "Select * from table_name", adCmdText可替换为objCmd.Execute "table_name",adCmdTable

objCmd.Execute "Exec proceuure_name",adCmdText可替换为objCmd.Execute "proceuure _name", adCmdStoredProc

  还有很重要的一点就是,如果你的SQL语句没有返回记录集,如insert和update等,那么使用adExecuteNoRecords(ADO2.0)可以减低系统开销(可以加到adCmdText 和adCmdStoredProc上,如adCmdStoredProc + adExecuteNoRecords)

  还有adCmdTableDirect和adCmdFile(ADO2.0),我还不太清楚怎么用,adCmdFile可用于访问一个XML文件。

2.2 Prepared

  如果你需要重复的执行类似的SQL语句,那么你可以预编译你的SQL语句,提高的效率也很可观

objCmd.CommandText = "SELECT spell from TYPER.wordspell where word = ? "

objCmd.Prepared = True

objCmd.Parameters.Append objCmd.CreateParameter("word", adVarChar, , 2)

For i = 1 To Len(strName)

strChar = Mid(strName, i, 1)

objCmd("word") = strChar

Set objRS = objCmd.Execute

If objRS.EOF Then

strNamesame = strNamesame & strChar

Else

strNamesame = strNamesame & objRS("spell")

End If

Next ’i = 1 To Len(strName)
3 Recordset

3.1 LockType

  缺省是adLockReadOnly,如果你不用修改数据,就不要改成adLockOptimistic之类的,否则也会减低速度和增加开销的

  adLockReadOnly > adLockPessimistic > adLockOptimistic > adLockBatchOptimistic

3.2 CursorType

缺省是adOpenForwardOnly,如果你只用MoveNext Method,也最好不要改,速度影响140%左右

adOpenForwardOnly > adOpenDynamic > adOpenKeyset > adOpenStatic

3.3 CursorLocation

  缺省是adUseServer,其实不好,它可以随时反映数据库服务器上的改动,但是系统开销很大,而且需要维持和数据库服务器的连接,但是在数据库服务器和Web Server在一起的时候要快些。不过在adLockOptimistic的时候使我无法使用RecordCount等Property。

使用用adUseClient的话,你可以对数据做再排序,筛选,shape等操作

如果对数据的实时性没有要求的话,尽量用adUseClient

4 其它

4.1 Early bind

用ASP这一点就不用看了,如果用VB的话

Dim objConn As ADODB.Connection 比 Set objConn = CreateObject("ADODB.Connection")要好

4.2 ADO 2.1里的shape真是好玩

4.3 ADO 2.1可以用objRS.Fields.Append来建立一个Recordset

4.4 把Recordset的一列数据直接变成一个数组来操作速度快一些,但是系统开销要大一些

ADO读取Excel的简单例子

一、简单说明: 工程名字ADO_Excel,类型是console app, 非empty有预编译头stdafx.h。 编译说明: 1.确保C盘下面路径有msado15.dll,没有安装office2...
  • Blues1021
  • Blues1021
  • 2015年02月04日 12:14
  • 6053

Windows下C++访问数据库(ADO)

C++利用ADO访问数据库还是比较方便的,我参考网上其它资料把ADO到一个类中,这样调用起来会更加的方便 这个类单线程访问数据库没有问题,提供了查询、增加、删除和修改的接口。 并行访问的话会有...
  • luke2834
  • luke2834
  • 2015年08月19日 12:07
  • 1828

Delphi下的原生ADO使用方法

本文向您揭示在Delphi中使用ADO是如何轻而易举,结合了ADO的Delphi应用程序,将不再依赖于BDE。 ADO的精髓在于利用简单的COM指令来快速方便的访问ODBC数据源,微软的表格、...
  • Hmillet
  • Hmillet
  • 2016年03月30日 09:55
  • 2435

ODBC、OLEDB和ADO之间的关系

学习了.net视频之后,对里面涉及到的数据库连接部分中的一些概念
  • wangyy130
  • wangyy130
  • 2014年05月26日 19:45
  • 1783

用ADO操作数据库的方法步骤

学习ADO时总结的一些经验     用ADO操作数据库的方法步骤   ADO接口简介 ADO库包含三个基本接口:_ConnectionPtr接口、_CommandPtr接口和_RecordsetPtr...
  • gongluck93
  • gongluck93
  • 2016年09月19日 10:33
  • 2706

ADO和ADO.NET的区别

ADO.NET是ADO的后继版本,主要目的是在.NET Framework中更容易地创建分布式、 数据共享的应用程序,它提供了一个数据访问接口,以便和OLE DB数据源进行通信,如 SQL S...
  • ZHOUCHAOQIANG
  • ZHOUCHAOQIANG
  • 2014年04月30日 10:11
  • 4133

C++使用ADO2数据库类查询、添加、修改、删除操作

在工程中添加ado2.h、ado2.cpp两个文件 如果项目之前在XP在编译,在换到WINDOWS7编译时可能会出错,这是因为msado15.dll和MSJRO.DLL版本的问题。 XP ...
  • bingo1191683228
  • bingo1191683228
  • 2015年05月05日 16:08
  • 1118

【VBA研究】使用ADO组件的两种方式----引用法和创建法

作者:iamlaosong 1、引用法      引用ADO相关组件:打开VBA编辑器,在菜单中点选“工具”--》“引用”。确保“Microsoft ActiviteX Data Objects 2....
  • iamlaosong
  • iamlaosong
  • 2015年04月17日 14:27
  • 2917

64位程序,利用ADO连接Oracle数据库

刚好手头项目解决了ADO连接Oracle数据库的问题,z
  • sisyphus_zhou
  • sisyphus_zhou
  • 2014年09月29日 16:14
  • 6639

VS与MySQL通过ADO方式连接

1.下载好MySQL之后,安装开发员的版本,用命令行在数据库test下建立表st并插入了两条记录,然后OBDC添加用户、系统DSN 驱动程序是MySQL OBDC 5.3 ANSI Driver ...
  • BCD_not_CBD
  • BCD_not_CBD
  • 2015年08月29日 08:45
  • 742
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:asp中ADO的优化
举报原因:
原因补充:

(最多只允许输入30个字)