ASP数据库操作基础.ppt
第九章 ASP数据库操作基础,2023/7/29,章节概述,使用ASP技术设计网页,把数据库放到网页的后面,使用户不必直接操作数据库,而是通过网页来使用数据库,这样用户可以方便灵活的,在自己权限范围内操作数据库。,2023/7/29,章节内容,本章的主要内容是:数据库存取组件Connection对象Command对象Recordse对象,2023/7/29,9.1数据库存取组件,数据库存取组件(Database Access Component)是使用ADO(ActiveX Data Objects)技术来存取符合ODBC标准的数据库或者具有表格状数据形式的一种ASP内置组件。ADO数据库存取组件(以下简称ADO)可以兼容大部分的数据库,本书主要介绍ADO对ACCESS数据库的存取操作。,2023/7/29,9.1数据库存取组件,ADO数据库存取组件主要包括三个对象Connection对象又叫连接对象,主要用来在ASP文件和数据库之间建立连接,为两者间的信息传递提供通道,是Command对象的基础。Command对象又叫命令对象,主要对数据库执行操作,包括:增加、删除、修改和查询四种常用的操作。Recordse对象又叫记录集对象,如果对数据库执行查询操作,就会返回一个记录集合,包含满足条件的记录。,2023/7/29,ADO的使用方法,三个对象拥有丰富的属性和方法,使用灵活多样,为了便于大家掌握,本书对三个对象的主要属性和方法进行说明的同时,提供了一种比较科学的和完整的使用方法。ADO对象的使用方法是:首先使用Connection对象建立和数据库的连接,然后使用Command对象执行对数据库的操作,如果执行的操作时查询,使用Recordset对象获取查询的结果。,2023/7/29,9.2 Connection对象,功能概述:使用ADO对数据库进行操作,首先要依靠Connection对象在网页和数据库之间建立连接。使用方法:首先创建Connection对象,然后设置Connection对象的属性,最后执行Connection对象的相应方法。,2023/7/29,对象的创建,Connection对象的创建语法如下:Set Connection对象=Server.Createobject(“Adodb.Connection”)例如:,2023/7/29,9.2.2 Connection对象常用的属性,Connectionstring:用于指定Connection对象的数据库连接信息。它的取值可以有两种:数据源或连接字符串。语法为:Connection对象.Connectionstring=数据源或连接字符串 Connectiontimeout:用于指定Connection对象的Open方法打开与数据库的连接所需的最长时间,单位是秒。该属性的默认值为15秒,如果设定为0,表示一直连接下去,直到连通为止。语法为:Connection对象.Connectiontimeout=整数,2023/7/29,对象常用的方法,Open:打开与数据库的连接。在使用open方法前要设置Connectionstring属性,这是它的操作对象。语法为:Connection对象.Open Close:关闭一个已经打开的ASP网页文件和数据库之间的连接。当连接关闭了,Connection对象依然存在,但依赖于Connection对象的Command对象和Recordset对象将不能使用。语法为:Connection对象.close,2023/7/29,使用数据源和连接字符串,Connection 对象的Connectionstring属性用于设置对数据库的连接,它的取值有两种,分别是使用数据源(ODBC)和使用连接字符串。,2023/7/29,使用数据源,数据源就是数据源开放数据库连接(ODBC),利用它可以访问来自多种数据库管理系统的数据。数据源采用统一的方法访问各种数据库管理系统,并提供给应用程序统一的接口,这样应用程序不必关心如何连接具体的那种数据库管理系统,而只需要使用数据源,就可以操作各种数据库了。请看数据库连接实例,2023/7/29,使用数据源,创建Connection 对象,使用数据源与数据库连接,代码如下:,2023/7/29,使用连接字符串,数据源连接数据库管理系统需要具有在服务器上创建数据源的权限,而且移植到另一台服务器上需要重新设置数据源,而使用数据库连接字符串则没有这些问题。对Access数据库使用数据库连接字符串需要用到两个参数Dbq和Driver,Dbq的取值是数据库的物理路径,Driver的取值是数据库的类型。,2023/7/29,直接使用物理路径,下面使用连接字符串作为ConnectionString属性的取值。例如:CJGL.mdb数据库文件在C:Inetpubwwwrootchapter10文件夹中,可以设置为:,2023/7/29,转换使用物理路径,在实际的开发中为了方便移植,可以利用Server对象的Mappath方法,将虚拟路径转变为实际的物理路径。语法为:Server.Mappath(虚拟路径字符串)如果数据库文件和当前ASP文件在同一个文件夹中,可以直接写数据库文件名,上例可以修改为:如果数据库文件和ASP文件不在同一个文件夹,要书写数据库文件相对于ASP文件的路径。为了方便管理,经常在网页的根目录下,建立专门的文件夹存放数据库文件。例如:当前网页在根目录下,并且在根目录下建立Data文件夹存放CJGL.MDB数据库文件,ConnectionString属性设置如下:,2023/7/29,字符串连接数据库完整的示例,2023/7/29,9.3Command对象,Command对象主要功能是对数据库执行操作。该对象利用connection对象提供的连接通道,在ASP网页文件和数据库间传递对数据库的操作命令。Command对象的使用方法是:首先创建Connection对象,设置Connection对象的属性,并打开与数据库的连接,然后设置Command对象的属性,执行Command对象的方法,如果是查询操作,还要创建Recordset对象接收查询的结果。,2023/7/29,对象的创建,Command对象的创建类似于connection对象,要使用server对象的createobject方法。Command对象的创建语法如下:例如:,2023/7/29,对象的属性,ActiveConnection:设置Command对象需要使用的那个connection对象作为连接。该属性取值为已经打开的connection对象。语法为:Command对象.Activeconnection=connection对象 Commandtext:设置对数据库的操作命令。它的取值可以是SQL语句、表名或查询名。语法为:Command对象.Commandtext=SQL语句、表名和查询名,2023/7/29,Command对象的属性,Commandtype:该属性设置操作命令的类型,即说明Commandtext属性取值的类型。语法为:Command对象.Commandtype=属性值在存取Access数据库中常用的取值如表所示:,2023/7/29,Command对象的属性,Commandtimeout:设置Command对象的execute方法的最长执行时间,单位是秒。默认值是30秒,可以根据需要设置大小,如果要无限制的执行下去,则设置为0。语法为:Command对象.Commandtimeout=整数值Prepared:设置Commandtext属性所指定的操作命令是否先行编译,存储。对于经常使用的查询语句,可以将它进行编译、存储,第一遍执行时会慢一些,以后执行时,速度可以明显加快。它的取值为True或False。语法为:Command对象.Commandtimeout=True或False,2023/7/29,对象的方法,Execute:执行对数据库的各种操作。对数据库的操作可以归纳为增加、删除、更新和查询。如果执行增加、删除和更新操作,没有返回值。语法为:Command对象.execute如果执行查询操作,则返回一个记录集合,需要创建一个recordset对象来接受这个记录集。关于recordset对象的主要使用方法在9.4节做详细的介绍,这里给出一种较简单的创建方法。语法为:Set recordset对象=Command对象.executeCreateparameter:创建parameter子对象,主要用于参数查询。在小节对参数查询作详细的介绍。,2023/7/29,在Command对象中使用SQL语句,通过设置Command对象的Commandtext属性,可以使用SQL语句、表和查询对数据库进行存取,其中使用SQL语句是最简单的形式。语法为:Command对象.Commandtext=SQL语句SQL语句中的条件部分对数据进行筛选,条件可以是常量表达式或者变量表达式,下面分别介绍两种形式的SQL语句在Command对象中的应用。可以先在数据库中调试好SQL语句,然后拿过来用。,2023/7/29,1.常量条件,这类SQL语句中,条件表达式是确定的。例如:查询女同学的信息,对应的SQL语句为:Select*from xsxx where xb=女把该语句设置为Command对象的Commandtext属性,如下,2023/7/29,2.变量条件,这类SQL语句中,条件表达式是确定的。例如:查询女同学的信息,对应的SQL语句为:Select*from xsxx where xb=女把该语句设置为Command对象的Commandtext属性,如下,2023/7/29,在Command对象中使用表和非参数查询,1.使用表有的时候我们需要获取整个表的全部数据,这种情况下可以设置commandtext属性取值为相应的表名。语法为:Command对象.Commandtext=表名2.使用非参数查询 通过设置commandtext属性的取值为查询名,可以执行相应的查询。这样做的好处有三个:(1)在Access数据库中创建查询比在网页中直接书写SQL语句更容易,更方便。(2)在Access数据库中创建查询更安全,这样在网页屏蔽了数据库的结构信息,减小了系统风险。(3)在Access数据库中创建查询,在网页中引用查询名,使数据库的设计开发和网页程序的开发相对独立,便于分工合作。,2023/7/29,使用参数查询,在数据库中使用参数查询可以由用户决定查询的内容,类似前面的在SQL语句中使用变量的形式。在Command对象中使用参数查询的方法是:首先创建参数对象Parameter,然后把参数变量添加到参数集合Parameters,最后设置Command对象的属性,执行查询操作。,2023/7/29,1.创建参数对象,Command对象提供了Createparameter方法创建参数对象,语法为:Set Parameter对象=Command对象.Createparameter(name,type,direction,size,value),2023/7/29,参数说明,Type参数取值,Direction参数取值,2023/7/29,示例,2023/7/29,2.添加到参数对象集合,Command对象拥有一个参数集合Parameters,必须把创建的参数加入到参数集合中。参数集合Parameters的方法Append可以增加参数,语法为:Command对象.Parameters.Append Parameter对象例如:把上例中创建的参数加入到Command对象的参数集合中,代码如下:,2023/7/29,对象操作示例,1.查询操作2.增加操作3.删除操作4.更新操作,2023/7/29,9.4Recordset对象,如果Command对象对数据库执行的是查询操作,那么从数据库中返回到ASP文件的查询结果要创建recordset对象来接受。Recordset对象和前面介绍的数据库中的表有相似的地方,由字段名构成记录集的结构,下面是数据区域,如图所示。数据区域有两个特殊的位置bof和eof,bof是记录集数据区域的开始,eof是记录集数据区域的结尾,中间位置是记录的集合。在数据区域中存在一个指针,指针可以在bof、eof和记录间移动。当指针指向一条记录时,那条记录就是当前记录,只能对当前记录操作,任何时候当前记录只能有一条。,2023/7/29,Recordset对象示意图,图9.11 Recordset对象,2023/7/29,创建Recordset对象,前面我们介绍一种简单的recordset对象创建的方法,由Command对象的execute方法执行,直接创建。语法为:Set Recordset对象=Command对象.execute这种方法中Recordset对象的属性采用的默认值,不能完全使用Recordset对象的功能。下面提供另外的使用方法:创建Recordset对象对象,然后设置Recordset对象的属性,最后执行Recordset对象的方法。首先介绍Recordset对象的创建方法,Recordset对象的创建和connection对象,Command对象的创建相似,要使用server对象的Createobject方法。语法为:,2023/7/29,对象的属性,Source:用于设置数据库的查询信息,可以是SQL语句、表或查询。语法为:Recordset 对象.Source=SQL语句、表和查询Activeconnection:用于设置数据库的连接信息,可以是数据源、连接字符串或者connection对象。其中connection对象必须已经打开。语法为:Recordset 对象.Activeconnection=数据源、连接字符串或者connection对象,2023/7/29,对象的属性,Cursortype:设置记录集中指针的类型。语法为:Recordset 对象.Cursortype=取值,2023/7/29,Cursortype取值,2023/7/29,Recordset对象的属性,Bof:该属性用于判断指针当前是否在记录集的开头,如果在开头返回true,否则返回false。语法为:Recordset 对象.BofEof:该属性用于判断指针当前是否在记录集的结尾,如果在结尾返回true,否则返回false。语法为:Recordset 对象.Bof当Bof和Eof取值都为true时,记录集为空,因此可以使用这种方法判断记录集是否为空集,不为空对应的代码位为:,2023/7/29,Recordset对象的属性,Recordcount:返回记录集中记录总数。该属性要求Cursortype属性为1或者3,否则出错。,2023/7/29,对象的方法,Recordset对象方法比较多,这里选取了常用的方法,并分成两组:基本方法和记录定位方法。首先介绍基本方法。Open方法:打开记录集,设置完成记录集的属性,可以打开记录集。打开记录集时,如果记录集不空,指针指向第一条记录;为空时,bof和eof重合,指针指向同一位置。语法为:Recordset 对象.openClose方法:关闭记录集,当不再使用时及时关闭。语法为:Recordset 对象.closeRecordset 对象的用法很灵活,这里介绍两种常用的方法:使用command对象直接创建使用open方法打开记录集,2023/7/29,1.使用command对象直接创建,这种方法前面已经介绍过,使用command对象的execute方法,直接创建一个Recordset对象。语法为:Set Recordset对象=Command对象.execute此时Recordset对象对象的属性都是默认值,因此功能弱一些。,2023/7/29,2.使用open方法打开记录集,这种方法首先设置Recordset的属性,然后执行open方法。Recordset的属性中activeconnection属性的取值比较灵活,如下:Recordset 对象.Activeconnection=数据源、连接字符串或已打开的connection对象,2023/7/29,记录集的操作,通过Command对象可以直接对数据进行增加、删除和修改,记录集可以完成这些功能,但记录集的主要操作是读取并显示数据。本书主要介绍使用记录集读取数据,操作分为两部分:记录定位和读取。,2023/7/29,1.记录定位的方法,方法说明如下:Movefirst:将指针移动到第一条记录。Movelast:将指针移动到最后一条记录。Movenext:移动到下一条记录。Moveprevious:移动到前一条记录。以上四个方法的语法为:Recordset对象.方法,2023/7/29,1.记录定位的方法,Move:移动到指定的记录。语法为:Recordset对象.move number,start参数意义如下:Start:设置指针移动的开始位置,如果省略,默认为当前指针。Number:指针移动的记录的数量。正数时向下移动,负数时向上移动。例如:表示从第3条记录向下移动5条记录。,2023/7/29,注意的问题,移动记录要注意的问题:(1)除了movenext以外,其他的方法都需要设置指针类型Cursortype属性为1。(2)移动到eof时,如果继续向下移动,就会出错;移动到bof时,如果继续向上移动,也会出错。因此,移动指针前要使用bof和eof判断是否达到了记录集的开始和结尾。(3)movenext方法速度最快,如果仅仅是按照顺序读取数据,建议使用该方法。,2023/7/29,读取全部数据,读取记录集中的全部数据,可以利用循环语句,对应的代码为:,2023/7/29,2.记录集的读取,通过前面记录集的介绍,大家知道记录集是查询所得到的数据,由字段名和数据组成的。可以通过引用字段名来读取当前指针指向的记录中相应的字段的数据。语法为:Recordset对象(“字段名”)例如:表示输出记录集中当前记录xh字段的数据。,2023/7/29,数据分页,当Recordset对象中的记录比较多的时候,分页显示更方便一些。Recordset对象提供了一组属性用于分页显示,2023/7/29,属性说明,Pagesize:该属性用于设置数据分页显示时每一页的记录数。语法为:Recordset对象.Pagesize=整数Pagecount:用于设置数据分页是数据页的总数Recordset对象.Pagecount=整数Absolutepage:用于设置当前指针位于哪一页Recordset对象.Absolutepag=整数Absoluteposition:用于设置当前指针所在的记录行的绝对位置。Recordset对象.Absoluteposition=整数,2023/7/29,分页,分页要解决的问题主要有:(1)每页显示多少条记录,共有多少页(2)当前显示第几页(3)导航页码的显示,解决的方法为:(1)通过设置Pagesize属性,决定每页多少条记录。记录的总数是一定的,因此每页多少条记录固定了,总页数也就固定了。(2)设置Absolutepage属性,决定当前显示第几页。(3)通过设置超链接页码,可以完成页码导航,通过传递参数决定导航到第几页。,2023/7/29,本章结束!请看下一章!,