ASP网站制作之ADO编程使用(1)
asp可以轻松地实现对页面内容的动态控制,根据不同的浏览者,显示不同的页面内容。而浏览者一点觉察不出来,就像为他专门制作的页面一样。使用各种各样的组件,asp可以完成无比强大的功能。ado|编程ADO(ActiveXDataObjects)是基于组件的数据库编程接口,它是一个和编程言语有关的COM组件体系。本文次要先容用ADO编程所必要注重的技能和在VC下举行ADO编程的形式,并对C++Extensions举行了复杂的会商,但愿对ADO开辟职员有必定的匡助感化。由于ADO是一个和编程言语有关的COM组件体系,以是这里会商的要点合用于一切的编程言语和编程情况,好比:VB、VBScript、VC、Java等等。编程技能
1.显式界说工具范例
实践上,这条原则不但合用于ADO编程,也合用于其他的与COM工具相干的编程。由于假如一入手下手就界说变量范例,则编译器在编译的时分就能够晓得变量的范例,此时编译器实践上是接纳vtable偏移的体例来失掉详细的COM工具包括的办法的地点(这一点和C++中虚函数的地点猎取体例相似);但假如一入手下手不指定变量范例的话,好比复杂地接纳以下的语句:
DIMmyConasObject
大概是:
DIMmyCon
如许,编译器在编译的时分就不克不及失掉变量的范例,而只能在运转的时分静态地失掉办法的信息(经由过程利用接口IDispatch的Invoke办法来完成),云云为了失掉办法的地点和相干的变量情形就必要在外部举行两次挪用,无疑会下降程序的运转速率。
2.绑定列到详细的字段工具
在程序入手下手时就创建对字段工具的援用,能够制止在每次失掉纪录后,再在Recordset::Fields中举行查找而增添体系的开支。
比方,能够接纳以下所示的代码:
PrivateSubTblBrowse_Click()
Dimfld1AsADODB.Field
Dimfld2AsADODB.Field
DimrsAsADODB.Recordset
setrs=g_cn.execute(...)
g_cn为全局工具adodb.connection
Setfld1=rs.Fields(“id”)数据表的字段
Setfld2=rs.Fields(“name”)’数据表的字段
Ifrs.BOF=FalseThen
Whilers.BOF=False
Debug.Printfld1.Value
Debug.Printfld2.Value
rs.MoveNext
Wend
EndIf
rs.Close
EndSub
3.用SQL语句和存储历程举行数据更新
只管接纳Recordset工具来更新数据长短常便利的,可是它的开支也年夜,经由过程数据源工具前往的查询集不但包括了数据,并且也包括了元数据(metadata),在有些时分元数据大概比数据自己还要年夜,以是最好接纳SQL语句来更新数据。另有要利用存储历程而不是单一的SQL语句来猎取信息。由于存储历程是在服务器端实行的,只把了局前往到客户端,如许一方面能够下降收集举行数据交互的开支,另外一方面使体系加倍简单保护,而且能坚持数据的分歧性。
4.利用汇合操纵单条的SELECT语句
在利用游标时,最好利用汇合的办法对单条的SELECT语句举行操纵。Recordset::get_Collect办法和Recordset::put_Collect办法是Recordset工具的快速体例,能够疾速地失掉一个字段的值而不必要取得关于一个字段的援用。比方,能够接纳以下代码:
SubCollect()
DimrsAsNewRecordset
rs.ActiveConnection=“...”
rs.Source=“一条SQL查询语句”
rs.Open
Debug.Printrs.Collect(0),rs.Collect(1),rs.Collect(2)
Debug.Printrs!au_id,rs!au_fname,rs!au_lname
EndSub
5.只查询所必要的数据
只管良多开辟职员都习气接纳“SELECT*FROMTBL”的形式举行查询,可是为了进步体系的效力,假如只必要个中某几个字段的值,最好把这几个字段间接写出来,同时必要限制前往纪录集的局限(经由过程WHERE子句举行限制)。
6.准确选择游标的地位、范例和锁体例
假如只必要按按次读取纪录而且不必要转动和更新纪录,最好利用服务器端游标(adUseServer)、仅向前游标(adOpenForwardOnly)和读加锁(adLockReadOnly),如许能够取得最好的功能。假如必要转动纪录,接纳客户端游标(adUseServer)会比接纳服务器端游标所失掉的功能要好,由于ADO体系默许是接纳服务器端游标范例。固然假如数据汇合相称年夜,接纳服务器端游标的功能会好一些。同时必要注重:假如接纳客户端游标,最好只接纳读加锁(adLockReadOnly)的锁范例,由于假如必要更新数据,客户端游标引擎必要失掉分外的信息(元数据),而猎取这个信息的价值长短常高贵的。
7.调剂纪录集工具的CacheSize属性
ADO利用纪录集工具的CacheSize属性来决意提取弛缓存的纪录的数量,当在缓存的局限内扫瞄数据时,ADO就只从缓存中提取数据。当要扫瞄的数据超越缓存局限的时分,ADO就开释以后缓存,提取下一些纪录(提取的数量为CacheSize所指定的巨细),以是必需依据详细的使用程序的情形,来设定CacheSize的巨细,包管失掉最好的功能。
8.界说Command工具的参数
在很多数据源中,失掉参数信息和实行命令的价值几近是一样的,以是最好本人在程序中界说好Command参数(也就是说要界说好参数的称号、范例和偏向信息),制止一些从数据供应者(Provider)那边猎取信息的操纵。
9.利用原始的OLEDB供应者
MDAC对很多数据源供应了原始的数据供应者,好比SQLServer、Oracle和Access数据库,如许就不必要再经由过程ODBC来猎取数据(也就是说不必要再经由过程ODBC驱动这一层),如许的优点是能更快地失掉数据,而且能下降磁盘和内存的开支。
10.断开Connection毗连
假如利用客户端游标,就要断开Connection毗连。ADO有一个特性是当利用客户端游标操纵Recordset纪录集的时分,不必要和服务器坚持接洽。以是能够充实使用这个特征下降服务器真个开支(服务器就不必要保护这些毗连了)。当操纵完纪录集必要更新时,能够从头和数据库举行毗连来更新数据。为了创立一个能够断开毗连的纪录集,同时必要利用静态游标(adOpenStatic)和批处置的加锁形式(adLockBatchOptimistic)。上面是有关处置的VC代码:
pRs.CreateInstance(__uuid(Recordset));
pRs->CursorLoction=adUseClient;
pRs->Open(strCmdText,strConnection,adOpenStatic,adLockBatchOptimistic,adCmdText);
pRs->PutRefActiveConnection(NULL);
//对纪录集工具pRs举行操纵
//从头和数据库创建毗连
pRs->PutRefActiveConnectio(pCon);
//批量更新数据
pRs->UpdateBatch(adAffectAll);
必要注重的是:当实行批量更新时,必需本人处置数据抵触成绩,由于更新数据时,其他用户也大概同时正在对该数据举行操纵。
11.利用adExecuteNoRecords选项
假如不必要前往纪录,要利用adExecuteNoRecords选项。ADO2.0包含一个新的实行选项称为adExecuteNoRecords。当利用该选项的时分,ADO就不会创立纪录集工具,不设置任何游标属性。数据供应者由于不必要认证汇合的属性而使功能失掉优化。详细的例子以下:
con.Execute“insertintotblvalues(fv1,fv2)”,,adExecuteNoRecords
对唯一一条的实行语句接纳Connection::Execute办法比利用Recordset::Open办法大概是Command::Execute办法的效果要好,由于ADO不保存任何命令形态的信息,因而实行功能就有所改善。
12.利用session/connection缓冲池
由于数据库的翻开和封闭十分损耗体系资本,因而,利用毗连池对基于多层的使用的功能会有很年夜的进步。当利用MDAC的时分,开辟职员自己其实不必要思索对数据库毗连的缓存,MDAC会主动处置它。毗连池在两个条理上供应撑持:OLEDBsessions和ODBC毗连。假如利用ADO,数据库毗连会主动被OLEDBsession缓冲池所缓存;假如利用ODBC,能够使用在ODBC数据源办理中新的毗连缓冲池选项对ODBC缓冲举行设置。
完成办法
我们晓得,在VB下举行基于ADO的编程绝对对照复杂,只需经由过程reference加载了得当的范例库后,就能够一般地挪用ADO工具。可是关于VC下的基于ADO的数据库开辟就略微庞大一些。VC中完成对ADO操纵一般有三种办法:
●#import办法;
●使用MFCOLE的ClassWizard;
●经由过程WindowsAPI中COM相干的函数。
在这三种办法中,#import是最便利的办法,它同意发生一个相似VB的类布局,使程序开辟变得很便利。上面分离先容这三种办法。
1.#import办法
在#import办法中,必要供应所要包括的范例库的路径和称号,VC可以主动发生一个对GUIDs的界说,和主动天生对ADO工具的封装。对任何援用的范例库,VC会在编译的时分主动天生两个文件:
●头文件(.tlh):包括了所枚举的范例和对范例库中工具的界说;
●完成文件(.tli):对范例库工具模子中的办法发生封装。
比方,在stdafx.h文件中增添对msado15.dd的#import以后,VC会发生msado15.tlh和msado15.tli两个文件。
#import可以利用一个新的类_com_ptr_t,它也被称为智能指针。智能指针可以主动实行QuyerInterface、AddRef和Release函数。
上面的代码演示了怎样利用#import在使用中完成对ADO的操纵:
#import“c:programfilesco</p>使用cdonts,可以发送、查看邮件,实现webmail的功能。结合wsh,可以实现对nt主机的管理,如nt用户管理、iis虚拟主机设置、exchange邮箱设置等等,就像管理本地机一样方便。 学习ASP其实应该上升到如何学习程序设计这种境界,其实学习程序设计又是接受一种编程思想。比如ASP如何学习,你也许在以前的学习中碰到过。以下我仔细给你说几点: 最近在学asp,不要问我为什么不直接学.net,因为公司网站是asp做的所以有这个需要,卖了本书asp入门到精通,对里面的六大内置对象老是记不住,还有很多属性和方法看的头晕。 最近在学asp,不要问我为什么不直接学.net,因为公司网站是asp做的所以有这个需要,卖了本书asp入门到精通,对里面的六大内置对象老是记不住,还有很多属性和方法看的头晕。 没有坚实的理论做基础,那么我们连踏入社会第一步的资本都没有,特别对于计算机专业的学生学好专业知识是置关重要的。在这里我侧重讲一下如何学习ASP,从平时的学习过程中。 下面简单介绍一下我学习ASP的方法,希望对想学习ASP的朋友有所帮助... 在平时的学习过程中要注意现学现用,注重运用,在掌握了一定的基础知识后,我们可以尝试做一些网页,也许在开始的时候我们可能会遇到很多问题,比如说如何很好的构建基本框架。 ASP的语言不仅仅只是命令格式差不多,而是包含在<%%>之内的命令完全就是VB语法。虽然ASP也是做为单独的一个技术来提出的,但他就是完全继承了VB所有的功能。
页:
[1]