全面优化ADO

<script type="text/javascript"> </script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>
<script type="text/javascript"> </script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>
1Connection
1.1Pooling
     在WebApplication中,常常会出现同时有很多用户同时访问的情况,而且中的对象作用域是页面级的,也就是
说,每个页面都要联接和断开数据库,岂不是会很慢?而且每个到数据库的联接会带来37k的系统开销,怎么
办?
      可能有人会想到用Application和Session来解决问题,但是,这是不可取的,如果用Application,那么会出现多个用户同时通过一个Connection访问数据库的情况,虽然节省了建立连接的时间,但是访问数据库的速度就会变得非常慢。如果用Session,出现的问题就是,Session超时怎么办?如果把Session.Timeout设得很大,那用户离开之后,连接还会保留一段时间,也会带来额外的开销。
     其实根本不用考虑这个问题,通过OLEDB访问数据库,它会替你解决这个问题,OLEDB有一个ResourcePooling,它会代
理你的连接请求,然后把别人刚用过的连接给你接着用。(具体机制不再阐述,其实我也没搞太明白,嘻嘻)
1.2Provider
可能没有多少人用过这个Property吧,它的缺省值是MSDASQL,还有MSIDXS和ADSDSOObject,但是在 ADO2.0(见VS98)和
ADO2.1(见SQL7)里面提供了一些新的Provider:
MSDAORA(OLEDBProviderfor)
Microsoft.Jet.OLEDB.3.51(OLEDBProviderforMicrosoftJet(forACCESS))
SQLOLEDB(MicrosoftSQLServerOLEDBProvider)
如果你所用的数据库是这些的话,用这些新的Provider就可以不通过ODBC而直接访问数据库,提高的效率就可想而知了。
2Command
2.1CommandType
缺省值是adCmdUnknown, ADO会逐个判断你的CommandType,直到它认为合适为止,不建议采用。(在Recordset.Open和
Connection.Execute的时候也可以用)
adCmdText是照原样执行你的SQL语句,但是如果你的SQLLanguage是以下几种的话,通过使用别的CommandType就可以提高
你的SQL语句执行效率
objCmd.Execute"Select*fromtable_name",adCmdText可替换为objCmd.Execute"table_name",adCmdTable
objCmd.Execute"Execproceuure_name",adCmdText可替换为objCmd.Execute"proceuure_name",adCmdStoredProc
还有很重要的一点就是,如果你的SQL语句没有返回记录集,如insert和update等,那么使用adExecuteNoRecords
ADO2.0)可以减低系统开销(可以加到adCmdText和adCmdStoredProc上,如adCmdStoredProc+adExecuteNoRecords)
还有adCmdTableDirect和adCmdFile( ADO2.0),我还不太清楚怎么用,adCmdFile可用于访问一个文件。
2.2Prepared
如果你需要重复的执行类似的SQL语句,那么你可以预编译你的SQL语句,提高的效率也很可观
objCmd.CommandText="SELECTspellfromTYPER.wordspellwhereword=?"
objCmd.Prepared=True
objCmd.Parameters.AppendobjCmd.CreateParameter("word",adVarChar,,2)
Fori=1ToLen(strName)
strChar=Mid(strName,i,1)
objCmd("word")=strChar
SetobjRS=objCmd.Execute
IfobjRS.EOFThen
strNamesame=strNamesame&strChar
Else
strNamesame=strNamesame&objRS("spell")
EndIf
Next''i=1ToLen(strName)
3Recordset
3.1LockType
缺省是adLockRe ADOnly,如果你不用修改数据,就不要改成adLockOptimistic之类的,否则也会减低速度和增加开销的
adLockRe ADOnly>adLockPessimistic>adLockOptimistic>adLockBatchOptimistic
3.2CursorType
缺省是 ADOpenForwardOnly,如果你只用MoveNextMethod,也最好不要改,速度影响140%左右
ADOpenForwardOnly> ADOpenDynamic> ADOpenKeyset> ADOpenStatic
3.3CursorLocation
缺省是adUseServer,其实不好,它可以随时反映数据库服务器上的改动,但是系统开销很大,而且需要维持和数据库服务 1 <script type="text/javascript"> </script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>
<script type="text/javascript"> </script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值