大雀软件园

首页 软件下载 安卓市场 苹果市场 电脑游戏 安卓游戏 文章资讯 驱动下载
技术开发 网页设计 图形图象 数据库 网络媒体 网络安全 站长CLUB 操作系统 媒体动画 安卓相关
当前位置: 首页 -> 技术开发 -> ASP专区 -> ADO编程应用(1)

ADO编程应用(1)

时间: 2021-07-31 作者:daque

ado(activex data objects)是鉴于组件的数据库编制程序接口,它是一个和编制程序谈话无干的com组件体例。正文重要引见用ado编制程序所须要提防的本领和在vc下举行ado编制程序的形式,并对c++ extensions举行了大略的计划,蓄意对ado开拓职员有确定的扶助效率。由于ado是一个和编制程序谈话无干的com组件体例,以是这边计划的重心实用于一切的编制程序谈话和编制程序情况,比方:vb、vbscript、vc、java之类。 编制程序本领 1.显式设置东西典型 本质上,这条规则不只实用于ado编制程序,也实用于其余的与com东西关系的编制程序。由于即使一发端就设置变量典型,则编写翻译器在编写翻译的功夫就不妨领会变量的典型,此时编写翻译器本质上是沿用vtable偏移的办法来获得简直的com东西包括的本领的地方(这一点和c++中虚因变量的地方获得办法一致);但即使一发端不指定变量典型的话,比方大略地沿用如次的语句: dim mycon as object 大概是: dim mycon 如许,编写翻译器在编写翻译的功夫就不许获得变量的典型,而只能在运转的功夫动静地获得本领的消息(经过运用接口idispatch的invoke本领来实行),如许为特出到本领的地方和关系的变量情景就须要在里面举行两次挪用,无疑会贬低步调的运转速率。 2.绑定列到简直的字段东西 在步调发端时就创造对字段东西的援用,不妨制止在历次获得记载后,再在recordset::fields中举行搜索而减少体例的开支。 比方,不妨沿用如次所示的代码: private sub tblbrowse_click() dim fld1 as adodb.field dim fld2 as adodb.field dim rs as adodb.recordset set rs=g_cn.execute(...) 'g_cn为全部东西adodb.connection set fld1 = rs.fields(“id”) '数据表的字段 set fld2 = rs.fields(“name”) ’数据表的字段 if rs.bof = false then while rs.bof = false debug.print fld1.value debug.print fld2.value rs.movenext wend end if rs.close end sub 3.用sql语句和保存进程举行数据革新 纵然沿用recordset东西来革新数据利害常简单的,然而它的开支也大,经过数据源东西归来的查问集不只包括了数据,并且也包括了元数据(metadata),在有些功夫元数据大概比数据自己还要大,以是最佳沿用sql语句来革新数据。再有要运用保存进程而不是简单的sql语句来获守信息。由于保存进程是在效劳器端实行的,只把截止归来到存户端,如许一上面不妨贬低搜集举行数据交互的开支,另一上面使体例越发简单保护,而且能维持数据的普遍性。 4.运用汇合操纵单条的select语句 在运用游标时,最佳运用汇合的本领对单条的select语句举行操纵。recordset::get_collect本领和recordset::put_collect本领是recordset 东西的赶快办法,不妨赶快地获得一个字段的值而不须要赢得对于一个字段的援用。比方,不妨沿用如次代码: sub collect() dim rs as new recordset rs.activeconnection = “...” rs.source=“一条sql查问语句” rs.open debug.print rs.collect(0),rs.collect(1),rs.collect(2) debug.print rs!au_id, rs!au_fname, rs!au_lname end sub 5.只查问所须要的数据 纵然很多开拓职员都风气沿用“select * from tbl”的形式举行查问,然而为了普及体例的功效,即使只须要个中某几个字段的值,最佳把这几个字段径直写出来,同声须要控制归来记载集的范畴(经过where子句举行控制)。 6.精确采用游目标场所、典型和锁办法 即使只须要按程序读取记载而且不须要震动和革新记载,最佳运用效劳器端游标(aduseserver)、仅向前游标(adopenforwardonly)和读加锁(adlockreadonly),如许不妨赢得最佳的本能。即使须要震动记载,沿用存户端游标(aduseserver)会比沿用效劳器端游标所获得的本能要好,由于ado体例默许是沿用效劳器端游标典型。固然即使数据汇合十分大,沿用效劳器端游目标本能会好少许。同声须要提防:即使沿用存户端游标,最佳只沿用读加锁(adlockreadonly)的锁典型,由于即使须要革新数据,存户端游标引擎须要获得特殊的消息(元数据),而获得这个消息的价格利害常高贵的。 7.安排记载集东西的cachesize属性 ado运用记载集东西的cachesize属性来确定索取平静存的记载的数量,当在缓存的范畴内欣赏数据时,ado就只从缓存中索取数据。当要欣赏的数据胜过缓存范畴的功夫,ado就开释暂时缓存,索取下少许记载(索取的数量为cachesize所指定的巨细),以是必需按照简直的运用步调的情景,来设定cachesize的巨细,保护获得最好的本能。 8.设置command东西的参数 在很多数据源中,获得参数消息和实行吩咐的价格简直是一律的,以是最佳本人在步调中设置好command参数(也即是说要设置好参数的称呼、典型和目标消息),制止少许从数据供给者(provider)何处获守信息的操纵。 9.运用原始的ole db供给者 mdac对很多数据源供给了原始的数据供给者,比方sql server、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选项。ado 2.0囊括一个新的实行选项称为adexecutenorecords。当运用该选项的功夫,ado就不会创造记载集东西,不树立任何游标属性。数据供给者由于不须要认证汇合的属性而使本能获得优化。简直的例子如次: con.execute “insert into tbl values(fv1, fv2) ”, , adexecutenorecords 对仅有一条的实行语句沿用connection::execute本领比运用recordset::open本领大概是command::execute本领的功效要好,由于ado不保蝉联何吩咐状况的消息,所以实行本能就有所矫正。 12.运用session/connection缓冲池 由于数据库的翻开和封闭特殊耗费体例资源,所以,运用贯穿池对鉴于多层的运用的本能会有很大的普及。当运用mdac的功夫,开拓职员自己并不须要商量对数据库贯穿的缓存,mdac会机动处置它。贯穿池在两个档次上供给扶助:ole db sessions和odbc贯穿。即使运用ado,数据库贯穿会机动被ole db session缓冲池所缓存;即使运用odbc,不妨运用在odbc数据源处置中新的贯穿缓冲池选项对odbc缓冲举行树立。 实行本领 咱们领会,在vb下举行鉴于ado的编制程序对立比拟大略,只有经过reference加载了符合的典型库后,就不妨平常地挪用ado东西。然而对于vc下的鉴于ado的数据库开拓就略微搀杂少许。vc中实行对ado操纵常常有三种本领: ●#import本领; ●运用mfc ole的classwizard; ●经过windows api中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:\program files\common files\system\ado\msado15.dll” \no_namespace rename ( “eof”, “adoeof” ) 重定名eof是需要的,由于典范的vc运用都仍旧设置了eof动作常数-1。 常常来说,操纵一个机动化东西须要设置和初始化一个用来操纵的变量。不妨经过运用智能南针 (_com_ptr_t)的结构因变量传播一个灵验的clsid大概是progid,也不妨经过_com_ptr_t::createinstance()本领来设置东西。简直代码如次所示: _connectionptr conn1( __uuidof( connection ) ); 也不妨沿用底下的代码实行同样的功效: _connectionptr conn1 = null; //设置东西 hresult hr = s_ok; //创造范例 hr =conn1.createinstance( __uuidof( connection ) ); 引荐沿用第二种办法,由于用第一种办法不许归来一个波折的hresult,以是也就不许确定ado贯穿东西是胜利仍旧波折,以及波折的因为。提防这边的__uuidof( connection)中的connection是在.tlh文献中设置的。经过把它传播给本领createinstance,就不妨创造一个灵验的adoconnection东西。 须要提防的是#import的no_namespace属性,它报告编写翻译器该类在不在一个独立的名字空间中。运用no_namespace表示着不须要在初始化变量时援用名字空间。固然即使在运用中须要导出多个典型库时,最佳不要运用no_namespace,免得惹起名字辩论。

热门阅览

最新排行

Copyright © 2019-2021 大雀软件园(www.daque.cn) All Rights Reserved.