Lecture6_ASP_ADO.ppt_第1页
Lecture6_ASP_ADO.ppt_第2页
Lecture6_ASP_ADO.ppt_第3页
Lecture6_ASP_ADO.ppt_第4页
Lecture6_ASP_ADO.ppt_第5页
已阅读5页,还剩66页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1,WhatisADO?,ADOstandsforActiveXDataObjectsADOisautomaticallyinstalledwithMicrosoftIISADOisaprogramminginterfacetoaccessdatainadatabaseADOisacollectionofobjectsthatallowASPpagestoconnecttoyourdatabaseontheserver.ADOallowsyoutoadd,removeandeditdatainsideofyourdatabase.,2,ADOObjectModel,TheADOobjectmodelprovidesaquick,yetpowerful,interfacetoaccessdatafromadatabase.,Therearethreemajorobjectsthatletyoudirectlyinterfacewithyourdata:Connection,Command,andRecordset.YoucanthinkoftheConnectionObjectasthepathwaytoyourdatasource.WithouttheConnectionObjectyouwouldhavenowaytoconnecttoyourdatasource.TheConnectionObjectcontainstheErrorsObject,whichlogsalltheerrorsthatoccurinyourConnectionObject.TheCommandObjectisoptional,butisstillimportanttoADO.TheRecordsetObjectexpandsouraccesstoourdata.,ADODB,Connection,Command,RecordSet,Errors,Error,Parameters,Parameter,Fields,Field,3,AccessingaDatabasefromanASPPage,ThecommonwaytoaccessadatabasefrominsideanASPpageisto:,CreateanADOconnectiontoadatabaseOpenthedatabaseconnectionCreateanADOrecordsetOpentherecordsetExtractthedatayouneedfromtherecordsetClosetherecordsetClosetheconnection,4,ADODatabaseConnection,Beforeadatabasecanbeaccessedfromawebpage,adatabaseconnectionhastobeestablished.,CreateaDSN-lessDatabaseConnection,TheeasiestwaytoconnecttoadatabaseistouseaDSN-lessconnection.ADSN-lessconnectioncanbeusedagainstanyMicrosoftAccessdatabaseonyourwebsite.Ifyouhaveadatabasecallednorthwind.mdblocatedinawebdirectorylikec:/webdata/,youcanconnecttothedatabasewiththefollowingASPcode:,Fromtheexampleabove,youhavetospecifytheMicrosoftAccessdatabasedriver(Provider)andthephysicalpathtothedatabaseonyourcomputer.,5,CreateanODBCDatabaseConnection,IfyouhaveanODBCdatabasecallednorthwindyoucanconnecttothedatabasewiththefollowingASPcode:,HereishowtocreateaconnectiontoaMSAccessDatabase:,OpentheODBCiconinyourControlPanel.ChoosetheSystemDSNtab.ClickonAddintheSystemDSNtab.SelecttheMicrosoftAccessDriver.ClickFinish.Inthenextscreen,clickSelecttolocatethedatabase.GivethedatabaseaDataSourceName(DSN).ClickOK.,ADODatabaseConnection,6,ADOConnectionObject,TheADOConnectionObjectisusedtocreateanopenconnectiontoadatasource.Throughthisconnection,youcanaccessandmanipulateadatabase.Ifyouwanttoaccessadatabasemultipletimes,youshouldestablishaconnectionusingtheConnectionobject.YoucanalsomakeaconnectiontoadatabasebypassingaconnectionstringviaaCommandorRecordsetobject.,ProgID,setobjConnection=Server.CreateObject(ADODB.connection),Collections,7,Properties,ADOConnectionObject,8,ADOConnectionObject,Methods,9,Events,ADOConnectionObject,10,ADOIsolationLevel,Chaos:Alltransactionscanoverwriteeachotherschangesbeforethechangesarecommitted.Withthissetting,itislikenothavinganytransactionsatall.ReadUncommitted(Browse):AtransactionoperatingattheReadUncommittedlevelcanseeuncommittedchangesmadebyothertransactions.Atthislevelofisolation,dirtyreads,non-repeatablereads,andphantomsareallpossible.ReadCommitted(CursorStability):AtransactionoperatingattheReadCommittedlevelcannotseechangesmadebyothertransactionsuntilthosetransactionsarecommitted.Atthislevelofisolation,dirtyreadsarenotpossible,butnon-repeatablereadsandphantomsarepossible.RepeatableRead:AtransactionoperatingattheRepeatableReadlevelisguaranteednottoseeanychangesmadebyothertransactionsinvaluesithasalreadyread.Atthislevelofisolation,dirtyreadsandnon-repeatablereadsarenotpossible,butphantomsarepossible.Serializable(Isolated):AtransactionoperatingattheSerializablelevelguaranteesthatallconcurrenttransactionswillinteractonlyinwaysthatproducethesameeffectasifeachtransactionwereentirelyexecutedoneaftertheother.Atthisisolationlevel,dirtyreads,non-repeatablereads,andphantomsarenotpossible.,Thelevelofisolationdeterminesifachangetothedatabasewilloccurbeforeorattheendofthetransaction.Italsodetermineswhatdegreeofvisibilityyoucurrentlyhavetodatachangedbyothertransactions.Afullyisolatedtransactionhasnooverlapwithanothertransactionoccurringatthesametime.,11,ADOIsolationLevel,Thetablebelowshowsthenameofthevalue,thenumericvalue,andtherelatedphenomenafromabove.,12,ADOConnectionMode,TheModesettingcanbeusedtoconstrictconcurrentaccesstothesamedatasource,guaranteeingtheaccuracyofthedata.,13,WhyADOUsesCursors,CursorTypes,LockTypes,andCursorLocations(ADO),First,thecursorlocationdetermineswheretostoretherowsetwhilethecursorisopen.Second,thecursortypedeterminesmovementwithinthecursorandwhethertherowsetwillreflectuserschanges.Third,thecursorslockingtypespecifieshowSQLServerwilllocktherowsontheserverwhenyouwanttomakechanges.,TheADODB.ConnectionobjecthasapropertyknownasCursorLocationwhichisusedtoset/retrievethecursorlocationthatwillbeusedbyanyrecordsetobjectsthataccesstheirdatathroughtheconnectionobject.TheCursorLocationpropertycanonlybesetwhiletheconnectionisclosed,andthepropertywillbeinheritedbyanyrecordsetobjectsthataccesstheirdatathroughthegivenconnectionobject.Recordsetobjectscanalsoexplicitlysetacursorlocationdifferentthantheconnectionobjectscursorlocationaslongasitissetbeforetherecordsetisopen.ThetwooptionsavailableforthispropertyareadUseClientandadUseServer,withadUseServerbeingthedefaultproperty.,CursorLocation,WithinADO,cursorshavethreefunctions.,14,CursorTypes,LockTypes,andCursorLocations(ADO),WhenusingtheadUseServerserver-sidecursorlocation,responsibilityforhandlingthedatageneratedbyaquerylieswiththedatabaseserver.Thebenefitofserver-sidecursorsisthatwegainaccesstothedynamiccursortype.Thisallowsustoseeanychangestothedatathataremadebyotherusersinthedataourapplicationisaccessing.Withaserver-sidecursor(adUseServer),wehaveaccesstotheadOpenDynamicandadOpenForwardOnlycursortypes,andallfouroftherecordsetlocktypes.,adUseServer,Client-sidecursors,specifiedwiththeadUseClientkeyword,arehandledinternallybyADO.Thesecursorsoffermorefunctionalitythantheirserver-sidecounterparts,andalsoresultinlessloadbeingplacedontheserver.Whenusingaclient-sideadUseClientcursor,onlytheadOpenStaticcursorisavailable,andwecannotusetheadLockPessimisticlocktype.Client-sidecursorsalsohelpdecreaseloadonserver,sincewithastaticcursordataissenttotheclientandthentheserverhasnofurthercommunicationswiththeclient.Thisallowsyourservertoscalealotbetterthanwithserver-sidecursors.,adUseClient,15,CursorTypes,LockTypes,andCursorLocations(ADO),Client-Hostedvs.Server-HostedCursors,Client-HostedCursors,Server-HostedCursors,EntireresultsetmustbesenttotheclientTheresultsetisstoredinvirtualmemoryLocalADOprovidermanagesthecursorChangesmadebyusersnotvisibleNotresourcesusedontheserverwhilecursorisopen,OnlytherequestedrowsaresenttotheclientTheresultisstoredontheserverTheservermanagesthecursorChangesmadebyusersarevisibleMinimalresourcesusedontheclientwhilecursorisopen,16,Whenyouexecuteaquerythatreturnsrowsofdata,suchasSELECT*FROMmytable,theresultingdataishandledusingacursor.AcursorcanbelocatedeitherontheclientwiththeadUseClientargument,orontheserverwiththeadUseServerargument.Inaddition,thereare4typesofcursor:,CursorTypes,CursorTypes,LockTypes,andCursorLocations(ADO),adOpenForwardOnly,adOpenStatic,adOpenDynamic,andadOpenKeyset.,AllowableCursorTypesBasedonCursorLocation,17,CursorTypes,LockTypes,andCursorLocations(ADO),Staticcursorsaresonamedbecauseadditionsanddeletionsofrowsdontchangethelistofrows.Furthermore,changestoexistingrecordsdontappear.Anychangethecursorownermakesthroughthecursorappearsimmediately,butthestaticcursorignoresonlymodificationsbyotherusersuntiltheapplicationrefreshesthecursor.Ingeneral,youcanthinkofaclient-hosted,staticcursorasalocalcopyofthetablethatsisolatedfromtherestofthedatabasesystem.Client-hostedandserver-hostedstaticcursorsletyouusetheMoveFirst,MoveNext,MovePrevious,MoveLast,andMovemethodsoftheRecordsetobjecttomovetoanyrowinthecursor.Inaddition,client-hostedstaticcursorsletyoumovetoaspecificrowbysettingtheAbsolutePositionpropertyequaltotherownumber.Thevalidvaluesforthepropertyare1tothenumberofrowsstoredintheRowcountproperty.AnimportantconsiderationwhenyouusetheAbsolutePositionpropertyisthatarowspositionwithintherowsetmaychangedependingoninsertsanddeletes.Forexample,ifyoudeleterow4,thenrow5becomesthenewrow4.Therefore,SQLServerdocumentationrecommendsusingBookmarksinsteadofrownumbers,butabsolutepositioningworkswellforread-onlycursors.,StaticCursors.,18,CursorTypes,LockTypes,andCursorLocations(ADO),Forward-onlycursorsletyouscanonlyfromthefirsttothelastrowsinthecursor.OnlytheMoveNextmethodworksfortheforward-onlycursor.Youcanupdaterows,insertnewrows,anddeleterows,butyoucantmovebackward.,Forward-OnlyCursors.,Ifyourapplicationrequiresimmediateaccesstoallchanges,regardlessofwhomakesthechanges,youneedtousedynamiccursors.Choosedynamiccursorsifmultipleusersinsert,update,anddeleterowsinthedatabaseatthesametime.Dynamiccursorsletyourapplicationmoveinanydirectionthroughthecursor,andshowalluserschangestoallrows.Dynamiccursorsareflexible,buttheydontsupportabsolutepositioning.Becausedynamiccursorsrespondtoallmembershipchanges,theydontprovideawayforyoutoidentify,forexample,the10throwinthecursor.SQLServermaintainsonerowinitsbuffer,anditre-executespartofthequerytofindthenextrow.Thus,dynamiccursorsusemoreserverresourcesthanothercursors.Althoughdynamiccursorsarepowerfulandextremelyflexible,usethemonlywhenyouneedto.,DynamicCursors.,19,CursorTypes,LockTypes,andCursorLocations(ADO),Withkeysetcursors,therowmembershipandroworderarefixedwhenyouopenthecursor.Aswithastaticcursor,yourapplicationcanmovebackandforthbetweenrows.Unlikestaticcursors,however,keysetcursorsletyouseechangesotherprogramsmakeandchangesyourprogrammakes.Rememberthatclient-hostedcursorsareessentiallylocalcopiesofthedata;therefore,aclient-hostedkeysetcursorisntuseful.ADOalwayschangesthesecursorsintoclient-hostedstaticcursors.Keysetcursorspresentthreespecialcases.,KeysetCursors.,First,whenauserdeletesarow,SQLServermarkstherowasdeletedanditbecomesinaccessible.Second,ifauserchangesarowsothatitnolongermatchesthecursorsWHEREclausecriteria,SQLServerineffectremovestherowfromthecursorasiftheuserhaddeletedit.Therowstillexistsinthetable,butitisinaccessible.Third,ifanotheruserinsertsarowintothetable,SQLServerdoesntaddittothecursor,butifyouaddarowthroughthecursor,itappearsattheendofthecursor.,20,CursorTypes,LockTypes,andCursorLocations(ADO),adLockReadOnly,youcannotalterthedata.,adLockPessimistic,Pessimisticlockingisthestrongesttypeoflock.Recordswithpessimisticlockingareunavailabletootherusers.Pessimisticlocksoccurwhentheserverdeliverstherecord.TherecordremainslockeduntilyouclosetheRecordsetobject.,adLockOptimistic,AdLockBatchOptimistic,Optimisticbatchlocksactlikeoptimisticlocks,excepttheyworkforbatchupdatesdeferringimmediateupdatesinfavorofupdatingmanyrecordsatonetimeratherthanupdatingeachrecordimmediatelyaswithadLockOptimisticlocking.Itsyourcallwhetherbatchupdatesorimmediateupdatesarebetterforyourapplication,inpart,itdependsonthelevelofinteractivityyourapplicationdemandsandhowpeopleexpecttousetheapplication.,Optimisticlockinglocksrecordsjustbeforeanupdateoccurs,andunlocksthemimmediatelyafterward.Otheruserscanaccessdataduringthetimeyoureupdatingtherecord,whichmeanstheymaypotentiallybeviewingoutdateddata.Similarly,withoptimisticlocking,multipleusersmaysimultaneouslytrytoupdatethesamedata,leadingtoproblems.Optimisticlocking,recordbyrecordtheproviderusesoptimisticlocking,lockingrecordsonlywhenyoucalltheUpdatemethod.,21,CursorTypes,LockTypes,andCursorLocations(ADO),Apessimisticapproach,withlocks,isusuallyseenasgoodfordataintegrity,althoughitcanbebadforconcurrency,especiallythelongeralockisheld.Inparticular,itguaranteesagainstlostupdates-definedasanupdateperformedbyoneprocessbetweenthetimeofaccessandupdatebyanotherprocess,whichoverwritestheinterimupdate.However,otherusersareblockedfromupdatingthedataandpossiblyreadingitaswellifthereadaccessalsotriestoacquirealock.Anoptimsticapproachcanalleviatelockconcurrencyproblems,butrequiresmorecodeandcareforintegrity.Thebasicsarethatanychangesbetweentimeofaccessandtimeofupdatemustbedetectedandtakenintoaccount.Dependingonthetypeofoptimisticconcurrencychosen,ADOcompareseithertherowID,therowdatavalues,TimeStampcolumnsorcombinationsoftheseoptionswithexistingdatatodetermineifarowhaschangedsincelastfetched.Ifnochangeshavetakenplacesincethelastfetch,theupdateismade.Otherwise,yourapplicationtriggersatrappableerror.,22,CursorTypes,LockTypes,andCursorLocations(ADO),Optimisticusingvalues,Usefulinconditionswherethereisonlyasmallchancethatasecondusermayupdatearowintheintervalbetweenwhenacursorisopenedandtherowisfinallyupdated.Thecurrentvaluesintherowarecomparedwiththevaluesretrievedwhentherowwaslastfetched.Ifanyofthevalueshavechanged,anerrorisreturned.Performanceisgoodbecauselocksarenotheldontherowsthatmakeuptheresultset.,Optimisticusingrows,Thisisfortableswheretherowshaveamodificationtimestampcolumn.Thecursorenginecompareseachrowscurrenttimestampvaluewiththetimestampvaluethatwasstoredwhentherowwaslastfetchedtodeterminewhethertherowwasupdated.Becauseonlythetimestampneedscomparison,thisisfasterthancheckingallofthevalues.,23,ADOConnectionObject:OtherProperties,CommandTimeoutYoucanusethispropertytosettheduration,inseconds,thataSQLqueryisallowedtoexecute.Ifthequerytakeslongerthenthespecifiedtimeinseconds,thequeryisabortedandtheexecutemethodfails.Thispropertyisusefulinslownetworkconnections,backloggedservers,orlargedatabaseaccess.DefaultDatabaseThispropertytellstheconnectionwhichdatabasetoconnectto.WhenODBCconnectionsaremade,wespecifythedefaultdatabasetotheonethatwascreatedforyou,makingthispropertyunnecessary.WhenusingaDSN-lessconnection,wecaneitherusethispropertyorspecifythedatabaseintheOpenmethodcall.VersionThispropertyallowsyoutodisplaythecurrentversionoftheADOthattheserverisrunning.,24,ADOConnectionObjectOtherProperties,ConnectionStringTheConnectionStringPropertyallowsyoutospecifythedatabaseyouwishtoconnectto.WecanconnecteitherthroughODBCorDSN-lessconnectionstoourdatabase.TheConnectionStringPropertyismadeupofaseriesofassociations.Eachpairwithintheassociationhasanameandavalueassignedtoit.SemicolonsseparateeachpairinsidetheConnectionString.,25,ADOConnectionObjectOtherProperties,Thisexampleopensaconnectiontothepubsdatabaseonthebigsmileserverusingtheusernameofsaandablankpassword.,26,ADOConnectionObjectOtherProperties,ConnectionTimeoutThispropertysetshowlong,inseconds,theopenmethodwilltrytoopenthedatabase.Ifthedatabasedoesnotopenwithinthespecifiedtime,theoperationisconsideredafailure.CursorLocationThispropertyletsADOknowwherethedatafromtheOpencommandwillbekept.TheConnectionObjectdoesnotusethevaluesetinthisproperty,buttheRecordsetObjectinheritsitsvalue.,Thefirstlocation,theClient,isaspecialcursorlocation.Theclientlocationwillallowthedatatobequeriedfromtheserverandthentransmittedbacktotheclient.Theclientthenmakesthemodificationstothedata.Oncethemodificationsaremade,themodifiedsetofdata,orRecordset,isthentransmittedbacktotheserverforupdating.Theclientbatchisamethodwherethedataistransmittedinbatchesbackandforthtotheserverandclient.Theclientmaymodify20recordsandthensendbackthatRecordsetforabatchupdate.,27,ADOConnectionObject:Methods,BeginTransWhenyoucallthismethodinsidetheConnectionObject,anewtransactionbegins.Wecansetthemodeandisolationpropertiestodefinehowourtransactionshouldwork.CommitTransWhentheCommitTransmethodiscalled,thecurrenttransactioniscommittedtothedatabase,meaningthatanychangesinsidethetransactionarewrittentothedatabase.CloseWecanusetheClosemethodtobreaktheConnectionObjectslink.Ifyouforgettocalltheclosemethodattheendofyourscripts,ASPautomaticallyclosesanydatabaseconnections.RollbackTransRollbackTranscancelsanychangesmadeduringthecurrenttransactionandendsthetransaction.OpenUsingtheOpenmethodonaConnectionObjectestablishesaphysicalconnectiontoadatasource.Afterthismethodsuccessfullycompletes,theconnectionisliveandyoucanissuecommandsagainstitandprocessresults.Therefore,thisisthemostimportantmethodforaccessingdatafromyourdatasources.Again,wecanusetheoptionalConnectionStringargumenttospecifyourconnectionstring.Wecanoverridethispropertybyspecifyingourconnectionstringasaparametertotheopencall.,28,ADOConnectionObject:Methods,ExecuteWecallExecutemethodtoexecuteaqueryagainstthedatasource.TheexecutemethodreturnsaRecordset.Ifthequerythatwesubmitdoesnotreturnanydata,thentheexecutemethodreturnsanemptyRecordset.Setrs=Connection.ExecuteQuery,Count,OptionsWhenwecalltheExecutemethod,wemustpasstheQueryparameter,whichcontainsastandardSQLquery.Theotherparameters,CountandOptions,areoptional.TheCountParametercontainsthenumberofrecordsaffectedbythequery.Thisparametermaybehelpfulifwewanttoknowhowmanyrecordsareinatable,orhowmanyrecordsweneedtoloopthroughtodisplayalloftherecordsintheRecordset.TheOptionsparametersthatwecanpass.,29,ADORecordsetObject,TheADORecordsetobjectisusedtoholdasetofrecordsfromadatabasetable.ARecordsetobjectconsistofrecordsandcolumns(fields).InADO,thisobjectisthemostimportantandthemostusedobjecttomanipulatedatafromadatabase.,setobjRecordset=Server.CreateObject(ADODB.recordset),WhenyoufirstopenaRecordset,thecurrentrecordpointerwillpointtothefirstrecordandtheBOFandEOFpropertiesareFalse.Iftherearenorecords,theBOFandEOFpropertyareTrue.Recordsetobjectscansupporttwotypesofupdating:,Immediateupdating-allchangesarewrittenimmediatelytothedatabaseonceyoucalltheUpdatemethod.Batchupdating-theproviderwillcachemultiplechangesandthensendthemtothedatabasewiththeUpdateBatchmethod.,ProgID,30,InADOthereare4differentcursortypesdefined:,ADORecordsetObject,Dynamiccursor-Allowsyoutoseeadditions,changes,anddeletionsbyotherusers.Keysetcursor-Likeadynamiccursor,exceptthatyoucannotseeadditionsbyotherusers,anditpreventsaccesstorecordsthatotherusershavedeleted.Datachangesbyotheruserswillstillbevisible.Staticcursor-Providesastaticcopyofarecordsetforyoutousetofinddataorgeneratereports.Additions,changes,ordeletionsbyotheruserswillnotbevisible.Thisistheonlytypeofcursorallowedwhenyouopenaclient-sideRecordsetobject.Forward-onlycursor-AllowsyoutoonlyscrollforwardthroughtheRecordset.Additions,changes,ordeletionsbyotheruserswillnotbevisible.,ThecursortypecanbesetbytheCursorTypepropertyorbytheCursorTypeparamet

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论