资源描述
,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,ASP动态网站编程,第,6,章,ADO,数据访问接口,内容提要,本章介绍,ADO,的基本概念,以及如何在,ASP,程序中使用,ADO,的对象。,介绍,ADO,的对象,Connection,、,RecordSet,和,Command,的使用。,介绍,SQL,语句的基本概念及如何利用,SQL,语句操作数据库。并介绍访问数据库的三个基本格式。,ADO,数据访问接口概述,ADO,常用的四种对象及其功能如下。,(,1,),连接对象(,Connection,):,用来连接数据库。,(,2,),记录集对象(,RecordSet,):,用来保存查询语句返回的结果。,(,3,),命令对象(,Command,):,用来执行,SQL,(,Structured Query Language,),语句或者,SQL Server,的存储过程。,(,4,),参数对象(,Parameter,):,用来为存储过程或查询提供参数。,下面介绍常用的连接对象(,Connection,)、,记录集对象(,RecordSet,)、,命令对象(,Command,)。,Connection,数据对象,与数据库的所有通信都通过一个打开的,Connection,对象进行。对一个数据库进行数据的插入和读取之前,必须先打开数据库的连接,数据库表是由行和列组成的一个二维表,当使用,ADO,打开数据库的时候,会有一个指针指向某一行记录,默认的情况下该指针指向数据库表的第一行。假定该指针叫“,rs,”,,如果要访问数据库表的字段,可以用图,6-1,所示的方法。,关系型数据库表与指针,其中:写法,rs(0),、,rs(“,学号,”),、,rs.Fields(0),和,rs.Fields(“,学号,”),是相同的,写法,rs(3),、,rs(“,语文,”),、,rs.Fields(3),和,rs.Fields(“,语文,”),是相同的,其余类推。根据上表和注释:,rs(4).Name,等价于,rs.Fields(4).Name,等价于 数学,rs(1).Name,等价于,rs.Fields(1).Name,等价于性别,假设当前的指针指向第三行记录,那么,rs(2).Value,等价于,rs(,姓名)等价于,rs(2),等价于小张,rs(4).Value,等价于,rs(4),等价于,rs(,数学)等价于60,打开和关闭数据库连接,要建立与一个数据库的连接,首先创建,Connection,对象的一个实例,然后调用,Connection,对象的,Open,方法打开一个连接,通过程序,6-01.,asp,输出数据库的表头。,数据库调用的基本格式,格式一:数据库调用的基本格式,格式说明:利用,Execute,方法执行,SQL,语句,第一步:建立,Connection,对象,set conn = Server.CreateObject(ADODB.Connection),第二步:使用,Connection,对象的,Open,方法建立数据库连接,conn.Open(driver=Microsoft Access Driver (*.mdb);dbq= &_,Server.MapPath(person.mdb),第三步:使用,Connection,对象的,Execute,方法执行,SQL,语句,如果执行查询语句,set rs = conn.Execute( ,数据查询语句 ),如果执行数据操纵语句,conn.Execute( ,数据操纵语句 ),格式一的特点,格式一的特点是:,RecordSet,对象的实例,rs,是利用,Connection,对象的,Execute,方法建立的,建立的,rs,对象的指针只能向后,不能向前移动。,第一步建立了,Connection,对象的一个实例,第二步利用,Open,方法和用,Access,数据驱动程序打开服务器上的某个,Access,数据库,第三步执行,SQL,语句。,Connection,对象,参数,说明,用法,Dsn,ODBC,数据源的名称,Dsn=,ODBC,名称,User,数据库登录的用户名,User=,Database User,Password,数据库登录的密码,Password =,User Password,Driver,数据库驱动程序的类型,Access,用,Access,的驱动,其他数据数据库用其他驱动。,Dbq,数据库的物理路径,Dbq =,C:accdb.mdb,Provider,数据提供者,Provider=,Microsoft.Jet.OLEDB.4.0,其他类型的数据库连接,连接的数据库,说明,Oracle,Driver=Microsoft ODBC for Oracle;Server=,服务器地址,;,User=;Password=,SQL Server,Server=,服务器地址,;,Database=,数据库名,;,uid=,用户名,;,pwd=,Excel,Driver=Microsoft Excel Driver(*.xls);Dbq=Excel,文件的物理路径,文本文件,Driver=Microsoft Text Driver(*.txt;*.csv);DefaultDir=,文件的物理路径,Connection,对象的方法和属性,方法名称,说明,用法,Open(),建立连接,Conn.Open(,数据库连接串,),Close(),关闭与数据库连接,Conn.Close(),Execute(),执行数据库查询,Conn.Execute(SQL,语句或者表名,),BeginTrans(),开始事务处理,Conn.BeginTrans(),CommitTrans(),提交事务处理,Conn.CommitTrans(),RollbackTrans(),取消事务处理,Conn.RollbackTRans(),Connection,对象的属性,属性名称,说明,用法,CommandTimeout,Execute,方法最长执行时间,默认值为,30,秒钟,可以修改,ConnectionTimeout,Open,方法最长执行时间,默认值为,15,秒,可以修改,ConnectionString,数据库的连接串,可以将连接串赋值给该属性,Mode,用来设置操作权限,1,为只读、,2,为只写、,3,为可读可写,Version,获取,ADO,的版本信息,Conn.Version,向浏览器输出数据库内容,向浏览器输出了表头后,可以利用,RecordSet,记录集返回数据库表中的数据,,如程序,6-02.,asp,所示。,输出表中所有数据,用一个循环输出数据库中所有的数据。当数据库打开时,,rs,对象定位在数据库表的第一条记录上,输出第一条记录的内容;要想输出第二条记录,必须执行,rs.MoveNext(),指令,让它移动到下一条记录。,rs.BOF,(,Begin Of File,,,文件开头)和,rs.EOF,(,End Of File,,,文件结尾)这两条指令判断记录指针是否移动最前面和最后面,,BOF,的位置是在第一条记录之前,,EOF,是在最后一条记录之后。如果,rs,指针在最后一条记录上,再执行一次,MoveNext(),时则,rs.EOF,为真。如果,rs.EOF,或者,rs.BOF,为真,这时读取数据会出错。,数据库表的结构,使用事务,事务在实际编程中使用比较频繁。事务典型的特征是:事务中一般包含几个事件,只有几个事件同时执行成功,整个事务才被执行,否则事务中的事件将不被执行。,比如:在,ATM,机上取,200,元,需要执行两个操作,,1,、从银行账户上减去,200,;,2,、,ATM,机将钱返给用户。这两个事件将构成事务。在实际编程中,需要同时成功,同时失败。,使用方法如程序,6-05.,asp,所示。,Connection,对象中的,Errors,集合,Error,对象是,Connection,对象的子对象。数据库程序运行的时候,一个错误就是一个,Error,对象,所有的,Error,对象就组成了,Errors,集合,又称为错误集合。,可以利用,Errors,集合的,Count,属性来判断是否有错误发生,还可以提取出错误的描述,最后根据错误的类型,给出相应的解决措施。,Errors,对象提供一些属性来得到错误信息,Error,对象的属性,参数,说明,用法,Number,错误编号,Err.Number,Description,错误描述,Err.Description,Source,发生错误的原因,Err.Source,HelpContext,错误的提示文字,Err.HelpContext,HelpFile,错误的提示文件,Err.HelpFile,NativeError,数据库服务器产生的错误,Err.NativeError,RecordSet,数据对象,记录集可以用来代替表中的记录。一个记录集包含一条或多条记录(行),每条记录包括一个或多个域(字段)。在任何时刻,只有一条记录是当前记录。,创建记录集对象的一个实例,可以使用,Connection,对象的,Execute(),方法,用,Execute(),创建的记录集指针只能向下,而不能向上移动,即不能执行,MoveFirst(),和,MovePrevious(),指令。,RecordSet,对象的属性及方法,利用,RecordSet,对象的属性和方法可以完全操作一个数据库,理论上只要,SQL,语句可以完成的操作,利用,RecordSet,对象都可以实现。,RecordSet,对象的属性和方法很多,常用的方法如表,6-6,所示。,RecordSet,对象的方法,方法,说明,用法,Open(),打开记录集,rs.Open(),Close(),关闭记录集,rs.Close(),Requery,重新打开记录集,rs.Requery(),Move(),当前记录前后移动条数,rs.Move(4),向后面移动,4,行,MoveFirst(),移动到第一条记录,rs.MoveFirst(),MoveNext(),移动到下一条记录,rs.MoveNext(),MovePrevious(),移动到记录集中的上一条记录,rs. MovePrevious(),MoveLast(),移动到记录集的最后一条记录,rs.,MoveLast(),AddNew(),向记录集中添加一条新记录,rs.AddNew(),Delete(),从记录集中删除当前记录,rs.,Delete(),Update(),保存对当前记录所做的修改,rs. Update(),UpdateBatch(),保存对一个或多个记录的修改,rs. UpdateBatch(),CancelBatch(),取消一批更新,rs. CancelBatch(),RecordSet,对象的属性,属性,说明,用法,ActiveConnection,当前记录集用的数据连接,rs. ActiveConnection = conn,RecordCounts,记录集的总数,rs.RecordCounts,BOF,记录集的开头,rs.BOF,EOF,记录集的结尾,rs.EOF,PageCount,返回记录集中的逻辑页数,rs.PageCount,PageSize,返回逻辑页中的记录个数,rs.PageSize,默认值是,10,AbsolutePage,指定当前的页,rs.AbsolutePage,AbsolutePosition,指定当前的记录,rs.AbsolutePosition,使用,RecordSet,对象打开数据库,格式二:数据库调用的基本格式,格式说明:利用,RecordSet,对象打开数据库表,第一步:建立,Connection,对象,set conn = Server.CreateObject(ADODB.Connection),第二步:使用,Connection,对象的,Open,方法建立数据库链接,conn.Open(driver=Microsoft Access Driver (*.mdb);dbq= &_,Server.MapPath(Access,数据库),第三步:建立,RecordSet,对象,set rs = Server.CreateObject(ADODB.Recordset),第四步:利用,RecordSet,对象的,Open,方法打开数据库,rs.Open SQL,语句,conn,打开方式, 锁定类型,打开类型的四个参数:,(,1,),adOpenFowardOnly,:,对应的数字是,0,(默认值),记录集只能向前移动。这些参数对应的数字,都保存在系统文件,Adovbs.inc,中。,(,2,),adOpenKeyset,:,对应的数字是,1,,记录集可以向前或向后移动。如果另一个用户删除或改变一条记录,记录集中将反映这个变化。但是,如果另一个用户添加一条新记录,新记录不会出现在记录集中。,(,3,),adOpenDynamic,:,对应的数字是,2,,使用动态游标,可以在记录集中向前或向后移动。其他用户造成的记录的任何变化都将在记录集中有所反映。,(,4,),adOpenStatic,。,对应的数字是,3,,使用静态游标,可以在记录集中向前或向后移动。但是,静态游标不会对其他用户造成的记录变化有所反映。,锁定类型的参数如下,(,1,),adLockReadOnly,:,只读锁定,对应的数字是,1,(默认值),不能修改记录集中的记录。,(,2,),adLockPessimistic,:,悲观锁定,对应的数字是,2,,指定在编辑一个记录时,立即锁定它。,进入锁定,-,rs(,数学,) =,rs(,数学,) + 100,rs(,语文,) =,rs(,语文,) + 100,rs.Update() -,解除锁定,锁定类型的参数,(,3,),adLockOptimistic,:,乐观锁定,对应的数字是,3,,指定只有调用记录集的,Update,方法时,才锁定记录。,rs(,数学,) =,rs(,数学,) + 100,rs(,语文,) =,rs(,语文,) + 100,进入锁定,-,rs.Update() -,解除锁定,(,4,),adLockBatchOptimistic,:,批次乐观锁定,对应的数字是,4,,指定记录只能成批地更新。,For I = 1 to 10,rs (,语文,)=,rs (,语文,) + 100,rs (,数学,) =,rs (,数学,) + 100,rs.MoveNext(),Next,进入锁定,-,rs.UpdateBatch() -,解除锁定,RecordSet,当数据库第一次打开时,,RecordSet,指针定位在第一条记录上,可以利用,AbsolutePosition,直接定位到某条记录上,,基本的语法是:,AbsolutePosition=N,,,如程序,6-07.,asp,文件所示。,AbsolutePage,还有一个属性是,AbsolutePage,,,当调用,AbsolutePage,时,系统将对数据记录进行分页,默认每页为,10,条记录,,AbsolutePage,为几,记录指针就自动定位到第几页的第一条记录上。,比如说,,AbsolutePage = 3,,,则记录指针就自动定位到第,21,条记录上去了,此时,AbsolutePosition = 21,。,计算公式为:,AbsolutePosition = (AbsolutePage-1)*PageSize,,,PageSize,默认是,10,,也可以设置为其他的值。,使用方法如程序,6-08.,asp,所示,实现数据库的分页显示,数据库中可能有成千上万条记录,如果一次都显示出来的话消耗的时间太多。,下面通过一个案例分成六个版本实现数据库的分页显示。,案例,6-1,分页显示,首先利用格式二将数据库表中某页的所有记录输出,如程序,pageV1.asp,所示。,在程序中加上翻页的超级链接就可以实现翻页,如程序,pageV2.asp,所示。,可以利用,PageCount,属性得到总页数,修正这些可能出现的错误,得到版本三。如程序,pageV3.asp,所示。,加入超级链接的版本四如程序,pageV4.asp,所示,将姓名一列加上超级链接。,偶数行和奇数行可显示不同的背景颜色。版本五将实现这些功能,如程序,pageV5.asp,所示。,Command,数据对象,Command,对象又称为命令对象,可以执行,SQL,语句和执行,SQL Server,的存储过程。通过传递,SQL,指令,对数据库提出操作要求,把得到的结果返回给,RecordSet,对象。,Command,对象的属性和方法,属性,说明,用法,ActiveConnection,指定,Command,用的连接,cmd. ActiveConnection = conn,CommandText,指定数据库查询信息,cmd. ActiveConnection =,表名或,SQL,CommandType,数据查询的类型,cmd. CommandType =1, 2,4,CommandTimeout,执行,SQL,语句的最长时间,默认为,30,秒,Prepared,是否预编译,可以加快速度,cmd.Parpared,True/ False,Command,对象提供的方法,方法,说明,用法,Execute(),执行,SQL,语句、表名或者存储过程,cmd.Execute(),CreateParameter(),创建,Command,对象的参数,cmd.CreateParameter(),格式三,格式三:数据库调用的基本格式,格式说明:利用,Command,对象的,Execute,方法建立,RecordSet,对象,第一步:建立,Connection,对象,set conn = Server.CreateObject(ADODB.Connection),第二步:使用,Connection,对象的,Open,方法建立数据库连接,conn.Open(driver=Microsoft Access Driver (*.mdb);dbq= +,Server.MapPath(Access,数据库),第三步:建立,Command,对象,cmd = Server.CreateObject(ADODB.Command),cmd.ActiveConnection = conn,cmd.CommandText = sql,第四步:使用,Command,对象的,Execute,方法执行,SQL,语句,如果执行查询语句,rs = cmd.Execute(),如果执行数据操纵语句,cmd.Execute(),使用,Command,对象,使用,Command,对象来执行,SQL,语句,如程序,6-09.,asp,所示。,例,6-2,分页列表的删除和修改,本案例实现的功能是:为案例,6-1,的分页列表添加修改数据和删除数据的功能。首先为列表添加两列:修改和删除。显示的主页面如图,6-16,所示。,案例,6-3,分页版本的留言簿,这里再对留言簿作一次升级,在案例,5-2,的基础上加入分页功能。,只要更改,display.asp,文件就可以。,小结,本章重点理解访问数据库的三大基本格式及各自的特点。掌握,Connection,,,RecordSet,和,Command,对象的使用方法。,熟练掌握利用格式二实现数据库的分页显示和利用,SQL,语句操作数据库的方法。,本章习题,一、选择题,1.,可以使用,ADO,来访问的数据库是,_,。,A) Microsoft Access B) Microsoft SQL Server,C) Oracle D),以上都可以,2.,命令对象(,Command,):,用来执行,_,。,A) SQL,语句,B) SQL Server,的存储过程,C),连接数据库,D),返回记录集,3.,语句,rs.Fields.Count,返回的值是,_,。,A),记录集的行数,B),记录集的列数,C),记录集的行数,+1,D),记录集的列数,-1,4.,使用,BeginTrans()_,,,利用,CommitTrans()_,,,如果有错误发生,利用,RollbackTrans(),来,_,。,A),提交一个事务,B),总结事务,C),开始一个事务,D),取消事务,5.,可以利用,Errors,集合的,_,来判断是否有错误发生,A) Number,属性,B) Description,属性,C) Count,属性,D) Source,属性,二、填空题,1.,当执行事务的时候,如果没有错误发生,则,conn.Errors.Cout,将为,_,。,2.,创建记录集对象的一个实例,可以使用,_,,这种方法创建的记录集指针只能向下,而不能向上移动,即不能执行,MoveFirst(),和,MovePrevious(),指令。,3.,判断记录集合是否到表的最后,,利用语句,_,。,三、简答题与程序设计题,1.,简述,ADO,的功能及常用的三大对象的用途。,2.,访问数据库格式一有什么特点?可以执行哪些,SQL,语句?,3.,如何实现模糊查询,?,4.,如何用变量替换,SQL,语句的值?,5.,格式二的数据打开方式和锁定方式有几种?各有什么含义?,6.,比较访问数据库的三个基本格式的异同。,
展开阅读全文