1、.1第4章 ASP存取数据库.24.1 数据库存取组件ADOASP提供了一个非常有用的内置的数据库存取组件,该组件利用ADO(Active Data Objects)技术来存取符合ODBC(Open Database Connectivity)标准的数据库。过去用CGI来存取数据库非常不容易,现在利用ADO技术就非常简单了。ActiveX Data Object可以提供Web页面与数据库结合的数据库技术。将传统的数据库后台管理模式放到Web页面上来进行。使数据库的存取更新更加简单、方便。.3ADOADO对象主要是由Connection对象、Command对象、Parameter对象、Recor
2、dset对象、Field对象、Property对象、Error对象等七个对象,以及Fields数据集合、Properties数据集合、Parameters数据集合、Error数据集合等四个数据集合所组成。.4对象和数据集合间的关系Connection对象Recordset对象Error对象Parameter对象Command对象Field对象Execute操作方法ActiveConnect属性Execute操作方法Fields数据对象Source属性Parameters数据集合Errors数据集合ActiveConnect属性.5Connection:连接数据库(连接对象)Command:对数
3、据库进行操作(命令对象)Recordset:对数据库中的记录进行操作对数据库进行操作时,先用Connection对象来建立与数据库的连接,然后用Command对象或Recordset对象来对数据库进行操作。.64.2 Connection对象一般需要明确建立Connection对象利用Command或Recordset对象直接连接数据库,则隐含建立Connection对象。一般用来建立和连接数据库,但也可以用来查询、添加、删除或修改记录。.74.2 Connection对象4.2.1 建立Connection对象对数据库进行操作前,先要建立Connection对象。方法:l利用server对象
4、的creatobject方法l.8Connection对象的方法:Open:建立Connection对象与数据库间的连接Close:关闭Connection对象Execute:执行对数据库的操作Begintrans:开始事务处理Committrans:提交处理结果Rollbacktrans:取消处理结果.9一、open方法:(connection对象名)Db.open 参数参数:Dbq=数据库的物理路径 Driver=数据库的类型(驱动程序)Dsn=ODBC数据源(可省略)没有设置数据源时:Dim db,strConnSet db=Server.CreateObject(ADODB.Conne
5、ction)strConn=DBQ=&Server.Mappath(address.mdb)&;Driver=Microsoft Access Driver(*.mdb)db.Open strConn.10open方法:设置数据源(addr)时:Dim dbSet db=Server.CreateObject(ADODB.Connection)db.Open“Dsn=addr”(db.open“addr”)优点:简单缺点:可移植性.11二、close方法:当一个页面关闭时,connection对象会自动关闭.12三、Execute方法:语法:l1、db.execute(SQLstring)l2
6、、set Recordset对象=db.execute(SQLstring)l(返回一个Recordset对象).13四、SQL语言lSelect查询语句lInsert插入语句lDelete删除语句lUpdate修改语句lCreate Table创建数据表语句lAlter Table修改数据表字段语句lDrop Table删除数据表语句.141 Select语句:查询记录语法:lSelect 字段列表 From 数据表列表 Where 条件Order By 字段例子:lSelect name,URL,intro From link lSelect*From linklSelect*From l
7、ink Where name=”新浪”lSelect*From link Order By link_id.152 Insert语句:添加新记录语法如下:lInsert Into 表名(字段1,字段2,)Values(字段值1,字段值2,)例如:lInsert Into link(name,URL,intro)Values(“中国教育网”,”,”中国教育部网站”).163 Delete语句:删除记录语法比较简单:lDelete From 数据表名 Where 条件例如:lDelete From link Where name=”网易”.174 Update语句:修改记录语法如下:lUpdate
8、 数据表名 Set 字段1字段值1,字段2字段值2,Where 条件例如:lUpdate link Set intro”非常棒的网站”Where name=”新浪”.185Creat table:创建数据表语法:lCreat table 数据表名(字段1名称 字段1类型,字段2名称 字段2类型,)类型:lText:文本,long=255bytelChar(n):文本,long=nbytelMemo:备注,longAlter Table:修改数据表字段增加或减少一个字段Alter Table 数据表名 Add column 字段名 字段类型l增加一个字段Alter Table 数据表名 drop
9、 column 字段名l删除一个字段.227Drop Table:删除数据表Drop Table 数据表名Drop Table lab1Drop Table lab2.234.2.3 Connection对象的属性:1、commandtimeoutl设置execute方法执行的最长时间30秒如果设置为0,无限制2、connectiontimeoutl设置open方法执行的最长时间15秒如果设置为0,无限制.24Connection对象的属性:3、connectionstringl指定数据库链接信息,可用来打开数据库例:.25Connection对象的属性:4、model设置连接数据库的权限lA
10、dmoderead(1)只读lAdmodewrite(2)只写lAdmodereadwrite(3)可读写Dim dbSet db=Server.CreateObject(ADODB.Connection)Db.mode=1 Db.open.264.3 Command对象Command对象简介l又称命令对象,主要用来对数据库进行查询,并将查询结果存储在recordset对像中。lCommand对象使用时,要先创建connection对象,Command对象向数据库提出操作请求(通过SQL指令),并将结果返回给recordset对象。.274.3 Command对象Command对象在实际开发中
11、使用不多,但在利用参数查询方面十分有用。Command对象的参数查询:主要用来提高查询速度l例如:一个程序,经常要处理上百万条记录,速度就很重要。.284.3.1建立Comand对象方法:l.29直接建立Command对象l.304.3.2 Command对象的属性属性说明ActiveConnection指定Connection连接对象CommandText指定数据库查询信息CommandType指定数据查询信息的类型CommandTimeoutCommand对象的Execute方法的最长执行时间Prepared 指定数据查询信息是否要先行编译、存储。.311ActiveConnection指
12、定Connection连接对象,表示该Command对象通过哪个Connection对象对数据库进行操作。语法:lCommand对象.activeconnection=connection对象l或(没有建立connection对象):lCommand对象.activeconnection=“数据源名称”.322CommandText指定数据库查询信息查询、添加、删除、修改记录。语法:lCommand对象.commandtext=*l*:“SQL语句”“数据表名称”.333CommandType数据查询信息可以是lSQL语句、表名、查询名、存储过程名用于指定查询信息的类型语法:lCommand对
13、象.CommandType=类型值.34CommandType示例.354CommandTimeout制定Command对象的Execute方法的最长执行时间:l默认30秒,若设置为0,则永久等待,直至执行。.365Prepared指定数据查询信息是否要先行编译、存储。l如果是经常要使用的查询语句,将它编译、存储,第一遍执行时速度慢一些,下次再执行时,速度明显加快。语法:lCommand对象.prepared=true/falselTrue:表示需要先编译(以后运行速度快).374.3.3 Command对象的方法方法不多,但很重要l方法说明lExecute 执行数据库查询(与connecti
14、on相似)lCreateParameter用来创建一个Parameter子对象.38一、Execute方法用来执行数据库查询l包括:查询记录、添加、删除、更新记录等。l与Connection对象的Execute方法功能相似。语法:lSet Recordset对象=Command对象.Executel或lCommand对象.Executel第一种方法返回一个Recordset对象,第二种方法不返回。l使用Execute之前,用CommandText指定数据库查询信息。.39示例-1.41实例(1)说明:l用command对象实现与数据库的连接和操作。l所使用的数据库是当前目录下的address.
15、mdbladdress.mdb中有name、tel、email、home、intro字段.42实例(1)-1%建立Connection对象Dim db,strConnstrConn=DBQ=&Server.Mappath(address.mdb)&;Driver=Microsoft Access Driver(*.mdb)Set db=Server.CreateObject(ADODB.Connection)db.Open strConn建立Command对象Dim cmdSet cmd=Server.CreateObject(ADODB.Command)cmd.ActiveConnectio
16、n=db.43实例(1)-2 查询记录Dim rs,strSqlstrSql=Select*From userscmd.CommandText=strSqlSet rs=cmd.ExecuteDo While Not rs.Eof Response.Write rs(name)&rs.MovenextLoop.44实例(1)-3添加记录strSql=insert into users(name,tel,email)values(李玫,88888888,)cmd.CommandText=strSqlcmd.Execute更新记录strSql=update users set tel=666666
17、66 where name=李玫cmd.CommandText=strSqlcmd.Execute.45实例(1)-4 删除记录,删除李玫的记录strSql=delete from users where name=李玫cmd.CommandText=strSqlcmd.Executedb.closeset db=nothing%.464.4 Recordset对象又称记录集对象,是最主要的对象。l执行删除、添加、修改记录操作时,可以不建立Recordset对象,而直接利用Connection或Command对象的Execute方法。l尽管Connection或Command对象可以完成几乎全
18、部数据库操作,但有些操作必须利用Recordset对象才能完成;如:在Asp页面上实现分页显示功能。.474.4 Recordset对象就是用来返回一个记录集,该记录集包含所要查询的全部数据查询数据库前要先生成Recordset对象对数据库进行修改、添加、删除操作时,可以不需要用到Recordset对象,而直接用connection对象。但是,有时用Recordset对象更简便。.484.4.1 建立Recordset对象标准语法:lSet Recordset对象=Server.CreateObject(“ADODB.Recordset)一般情况下,应先建立connection、command
19、对象,再来建立Recordset对象.494.4.1 建立Recordset对象打开数据库:Recordset对象.Open Source,ActiveConnection,CursorType,LockType,Options.50Recordset对象Open方法的参数参数说明SourceCommand对象名或SQL语句或数据表名ActiveConnectionConnection对象名或包含数据库连接信息的字符串CursorTypeRecordset对象记录中的指针类型LockTypeRecordset对象的使用类型OptionsSource类型.51Recordset对象Open方法的
20、参数总体来说lSource是数据库查询信息;lActiveConnection是数据库连接信息;lCursorType是指针类型(游标类型);lLockType是锁定信息;lOptions是数据库查询信息类型;后三个参数在大多数情况下可以省略。在省略中间参数时,必须用逗号留出位置。l.52Recordset对象建立方法一利用Connection对象的Excute方法l该方法最常用.53Recordset对象建立方法二利用Command对象的Execute方法l.54Recordset对象建立方法三利用Connection对象的Excute方法的另一种方式l.55Recordset对象建立方法四
21、利用Command对象的Execute方法的另一种方式l这种方法明确建立三个对象,功能最强,也是最科学的方法。.56Recordset对象建立方法五不明确建立Connection和Command对象l该方法最简单,它还是隐含建立了一个Connection对象和一个Command对象。.57记录集的结构记录1记录2记录3记录NBOfEof后前当前记录记录指针.584.4.2 Recordset对象的属性一、打开记录集的设置1Source:设置数据库查询信息lRecordset对象.source=*l*:command对象名、数据表名、SQL语句2Activeconnection:设置数据库连结信
22、息lRecordset对象.Activeconnection=*l*:connection对象名、数据库连结信息字符串.59Recordset对象的属性3Cursortype设置纪录指针类型lRecordset对象.cursortype=0(1、2、3)lP143 表6-124Locktype 设置纪录集锁定类型lRecordset对象.locktype=1(2、3、4)lP143 表6-13.60Recordset对象的属性二、打开记录集后的一些操作1Recordcount纪录集中纪录总数lVar=Recordset对象.cursortype2Bof 纪录指针在纪录集开头?lVar=Reco
23、rdset对象.Bofl是:Var=true否:Var=false3Eof 纪录指针在纪录集结尾?lVar=Recordset对象.Eofl是:Var=true否:Var=false.61Recordset对象的属性三、数据分页的一些功能1Pagesize设置分页显示时每页纪录数lRecordset对象.Pagesize=n2Pagecount设置分页显示时总页数lVar=Recordset对象.Pagecount3Absolutpage设置当前页面指针lRecordset对象.Absolutpage=m(mAbsolutposition设置当前纪录指针lRecordset对象.Absolut
24、position=m(m0向下移,0向上移.66Recordset对象的方法九、addnew添加纪录lRecordset对象.addnew 字段名数组,字段值数组l如果只有一个字段lRecordset对象.addnew 字段名,字段值十、delete 删除当前纪录lRecordset对象.delete十一、resync让客户端纪录集与服务器同步更新lRecordset对象.resync参数l参数:P175 表9-27.67Recordset对象的方法十二、update 更新数据库数据lRecordset对象.update执行addnew、delete后必须执行update,才能真正更新数据库l
25、Recordset对象.update 字段名,字段值直接更新当前纪录的某一字段的数值十三、cancelupdate取消刚才的更新lRecordset对象.canceluptate.684.5 Fields数据集合和Field对象 Field对象代表使用普通数据类型的数据的列。前面介绍的Recordset对象,就包含有由Field对象组成的Fields集合,每个Field对象对应于Recordset中的一列。使用Field对象的Value属性可设置或返回当前记录的数据。.69 Fields数据集合与其它数据集合一样,都有属于自己的方法与属性,有时候也称为Field数据集合对象。Fields数据集
26、合提供的方法和属性包括Count属性、Refresh方法、Item方法。Field对象属性包括Name、Value、Type、Attribute、NumericScale、Precision、ActualSize、DefinedSize、OriginalValue、UnderlyingValue等属性。方法包括GetChunk、AppendChunk等。.70Field对象的用法.71Field对象的用法常用属性举例l.724.6 Properies数据集合和Property对象 Property 对象代表由提供者定义的ADO对象的动态特征,动态属性由基本的数据提供者定义,并出现在相应的ADO
27、对象(如Connect对象、Command对象、Field对象、Recordset对象)的Properties集合中。语法如下:Set properties=ADO对象.Properties.73 Properties集合是包含特定对象实例的所有 Property 对象,有时候也称为Properties数据集合对象。包括Count属性、Refresh方法、Item方法等。Property对象主要是用来记录相应ADO对象的每一项属性值,包括了Name属性、Value属性、Type属性、Attributes属性等。.744.7 Parameters数据集合与Parameter对象 在前面介绍Com
28、mand对象时,知道Command对象可以通过Parameter对象来传递一个参数,而Parameters数据集合则是Command对象所有Parameter对象的集合。也可以说,Parameter对象是代表与基于参数化查询或存储过程的Command对象相关联的参数或自变量。.75 Parameters集合是由Parameter对象组成的。该集合包括Count属性、Append方法、Delete方法、Refresh方法、Item方法。Parameter对象负责记录程序中要传递参数的相关属性,Parameter对象提供了Name属性、Value属性、Type属性、Attribute属性等。.76
29、4.8 Errors数据集合和Error对象 在ADO关系图中,知道通过Errors数据集合,取得系统运行时发生的错误或警告信息,从而使程序更加完善。任何涉及ADO对象的操作都会生成一个或多个提供者错误。每个错误出现时,一个或多个Error对象将被放到Connection对象的Errors集合中。.77 如果是通过直接建立Connection对象来使用,可以直接通过Connection对象的Errors数据集合取得Error对象。如果是通过建立Recordset对象或Command对象,在通过ActiveConnection属性来使用Connection对象 时,则 必 须 通 过 R e c
30、 o r d s e t 对 象 或Command对象的ActiveConnection属性来取得Error对象。语法如下:Set Err=Connection.ErrorsSet Err=Recordset.ActiveConnection.ErrorsSet Err=Command.ActiveConnection.Errors.78 Errors数据集合,也称Errors数据集合对象,包含在响应涉及提供者的单个失败时产生的所有Error对象。包括Count属性、Clear方法、Item方法。Error对象是负责记录存储一个系统运行时发生的错误或警告。Error对象提供了Desription、Number、Source、NativeError、SQLState、HelpContext、HelpFile等属性。.79作业P157 1,2