资源描述
主讲:林妙兰主讲:林妙兰茂名广播电视大学茂名广播电视大学ConnectionConnection对象对象 9.2CommandCommand对象对象 9.3ADOADO的内部对象的内部对象9.1对多个表进行组合查询对多个表进行组合查询 9.6本章小结本章小结9.8通讯录综合示例通讯录综合示例 9.7RecordsetRecordset对象对象 9.4存取存取SQL ServerSQL Server数据库数据库 9.5 Connection对象又称连接对象,主要用来建立与数据库的连接。 Command对象又称命令对象,是对数据库执行命令的对象,它可以执行对数据库查询、添加、删除、修改等记录操作。 Recordset对象又称记录集对象,用来得到从数据库返回的记录集 。Error、Parameter、ield分别是它们的子对象 9.2.1 9.2.1 建立建立ConnectionConnection对象对象 9.2.2 Connection9.2.2 Connection对象的属性和方法对象的属性和方法 9.2.3 9.2.3 排序显示数据排序显示数据 9.2.4 9.2.4 查找数据查找数据 9.2.5 9.2.5 链接到详细页面链接到详细页面 9.2.6 9.2.6 事务处理事务处理 9.2.7 Error9.2.7 Error对象和对象和ErrorsErrors集合集合 建立Connection对象的方法一般如下:Set Connection对象实例=Server.CreateObject(ADODB.Connection)Connection对象实例.Open 数据库连接字符串 在上面的数据库连接字符串中,会用到若干参数,如DSN :ODBC数据源名称User:数据库登录用户名Password:数据库登录密码Driver :数据库的驱动程序类型Dbq :数据库的物理路径Provider: 数据提供者Data Source:数据库的物理路径 常用的数据库连接字符串的形式:常用的数据库连接字符串的形式:(1)基于ODBC数据源的连接方式Dsn=address2(2)基于ODBC数据源的连接方式的省略方式address2(3)基于ODBC但是没有数据源的连接方式Driver=Microsoft Access Driver (*.mdb);Dbq=C:Inetpubwwwrootasptempchapter9address.mdb“(4)基于ODBC但是没有数据源的连接方式(使用Server.MapPath转换路径)Driver=Microsoft Access Driver (*.mdb);Dbq= & Server.MapPath(address.mdb)(5)基于OLE DB的连接方式Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:Inetpubwwwrootasptempchapter9address.mdb(6)基于OLE DB的连接方式(使用Server.MapPath转换路径)Provider=Microsoft.Jet.OLEDB.4.0;Data Source= & Server.Mappath(address.mdb) (1)ConnectionTimeOut、CommandTimeOut属性用于设置Connection对象的Open方法和Execute方法的最长执行时间。 (2)ConnectionString、Provider、Mode属性这几个属性通常用来设置数据库连接信息或连接权限等。其中ConnectionString属性用于指定数据库连接字符串,如: Provider属性用于指定OLE DB提供者,如:conn.Provider=Microsoft.Jet.OLEDB.4.0Mode属性用来设置连接数据库的权限,利用该属性就可以在打开数据库时限制数据库的连接方式,比如只读或只写. 一般,我们会用Order By来实现对查询到的记录按某个字段排序的功能,但是许多网站有这样的效果,单击表格中某一列的标题就可以按相应的字段排序了,那么这一功能又是怎么实现的? 下面举例来说明:本示例的中心思想是给列标题添加超链接;单击该超链接就重新打开本页面,不过会将排序字段名称附加在查询字符串中传递过来;然后在Select语句中就可以按该字段排序了。 许多网站都有查找数据的页面,可以按照一个或多个字段查找符合条件的数据。下面就来制作一个按照姓名字段查找人员的例子。 本示例的中心思想是利用表单输入姓名,然后在Select语句中利用Where条件进行模糊查找。 如果一个数据表中含有很多字段,都显示在页面中就会有很多列,看起来不太方便和美观。通常做法是只显示若干重要字段,然后单击一个“详细”超链接,就可以打开一个详细页面,在详细页面中可以显示所有字段内容。 下面举例来说明,在主页面中只显示了部分字段,并增加了“详细”超链接,点详细后可查看到所有字段。 为什么要进行事务处理?银行转账示例 而BeginTrans、CommitTrans和RollbackTrans方法就是来解决这个问题的。当利用BeginTrans开始一个事务处理后,此后的所有更新都是暂时的,只有利用CommitTrans提交事务处理结果后,才真正更新数据库中的信息。如果中间发生错误,没有提交事务处理结果,则所有的更新都无效。ErrorError对象和对象和ErrorsErrors集合集合 ErrorError对象,它又称为错误对象,是对象,它又称为错误对象,是ConnectionConnection对象的子对象。数据库对象的子对象。数据库程序运行时,一个错误就是一个程序运行时,一个错误就是一个ErrorError对象,所有的对象,所有的ErrorError对象就组成了对象就组成了ErrorsErrors集合,又称错误集合。对象和集合的关系:汽车示例集合,又称错误集合。对象和集合的关系:汽车示例ErrorsErrors集合的属性和方法:集合的属性和方法:ErrorError对象的常用属性:对象的常用属性: 9.3.1 9.3.1 建立建立CommandCommand对象对象 9.3.2 Command9.3.2 Command对象的属性和方法对象的属性和方法 9.3.3 9.3.3 利用利用CommandCommand对象存取数据库对象存取数据库 9.3.4 9.3.4 非参数查询非参数查询 9.3.5 9.3.5 参数查询参数查询 9.3.6 Parameter9.3.6 Parameter对象和对象和ParametersParameters集合集合 CommandCommand对象对象又称命令对象,它是介于Connection对象和Recordset对象之间的一个对象,它主要通过传递SQL指令,对数据库提出查询、添加、删除、更新记录等操作请求,然后把得到的结果返回给Recordset对象。Command对象依赖Connection对象,因为Command对象必须经过一个已经建立的Connection对象才能发出SQL指令,只是实际开发时常常省略了Command对象。 建立建立CommandCommand对象的方法(对象的方法(1 1)首先建立Connection对象实例,然后再建立Command对象实例,如下: 建立建立 CommandCommand对象的方法(对象的方法(2 2)不建立Connection对象,直接建立Command对象,如下:这种建立方法其实也要隐含建立Connection对象,但是,因为没有明确建立Connection对象,就不能使用Connection对象的Execute等方法了。常用属性 CommandCommand对象的对象的几个常用属性(1)CommandText属性:该属性用于指定Command对象要对数据库进行操作的指令,一般是SQL语句,不过也可以是数据表名、查询名或存储过程名。例如:(2) CommandType属性:用于告诉Command对象数据查询指令的类型,究竟是SQL语句、表名还是查询名或存储过程名?例如: CommandCommand对象的对象的几个常用方法:(1)Execute方法 该方法用来执行数据库查询,包括查询记录、添加、删除、更新记录等各种操作,它的语法也有两种: Set Recordset对象实例= Command对象实例.Execute 或Command对象实例.Execute 在使用Execute方法之前,需要用CommandText指定数据库查询指令,告诉数据库要做什么操作。下面请看例子:(2)CreateParameter方法:该方法用来创造一个新的Parameter对象(参数对象),主要是在进行参数查询时使用,后面将专门讲述。利用Command对象存取数据库时,首先建立一个Connection对象,然后建立一个Command对象,之后的操作和Connection对象非常类似,下面来看一个综合示例。 查询一般分为含参数的参数查询和不含参数的非参数查询两种。之所以要使用查询,主要是希望将查询指令放在数据库中执行而不是在ASP中执行,这样的优点是可以加快速度,对于大型网站就比较有意义。 下面举例来介绍非参数查询的用法,首先建立一个查询qryList,语句如下:Select * From tbAddress Order By ID Desc 下面先来建立一个参数查询qryList2 ,语句如下:Select * From tbAddress Where strName=varName 所谓参数查询,指的就是SQL语句中含有一个参数。比如上面的varName是一个变量,它就是要传入的参数,执行时,根据传入的varName的值返回相关记录。 一个参数就是一个Parameter对象,若干个Parameter对象组成一个Parameters集合。 Parameters集合常用的属性和方法: 建立Parameter对象需要使用Command对象的CreateParameter方法。语法如下。Set Parameter对象实例=Command对象实例.CreateParameter(name,type,direction,size,value) 9.4.1 9.4.1 建立建立RecordsetRecordset对象对象 9.4.2 Recordset9.4.2 Recordset对象的属性和方法对象的属性和方法 9.4.3 9.4.3 利用利用RecordsetRecordset对象存取数据库对象存取数据库 9.4.4 9.4.4 添加不完整的记录添加不完整的记录 9.4.5 9.4.5 分页显示数据分页显示数据 9.4.6 Field9.4.6 Field对象和对象和FieldsFields集合集合 Recordset对象又称记录集对象。当用Command对象或Connection对象执行查询指令后,就会返回一个记录集对象,该记录集包含满足条件的所有记录,然后就可以利用ASP语句将记录集的数据显示在页面上。 本节就来讲解Recordset对象更多的功能 建立Recordset对象的方法利用Recordset对象实现添加、删除或更新记录操作; 数据分页显示的技术。 建立Recordset对象,语法如下。Set Recordset对象实例=Server.CreateObject(ADODB.Recordset)Recordset对象实例.Open Source, ActiveConnection, CursorType, LockType, Options 利用Connection对象的Execute方法建立说明:这种方法是最常用的方法。它没有明确建立Command对象,但是会建立一个隐含的Command对象。 利用利用ComandComand对象的对象的ExecuteExecute方法建立方法建立 说明:该方法明确建立了Connection对象和Command对象 。 利用Connection对象但明确建立Recordset对象的方式 说明:这是将方法一修改为明确建立Recordset对象。 利用Command对象但明确建立Recordset对象的方式 说明:这种方法明确建立三个对象,功能最强大,也最科学。 直接建立Recordset对象 说明:这种方法由于没有明确建立Connection对象和Command对象,就无法使用他们的特殊功能。 一般只有在查询记录时才会需要建立Recordset对象。而插入、删除和修改记录时则不需要返回记录集,所以一般就利用Connection对象或Command对象的Execute方法就可以了。 关于记录集关于记录集记录集,好比内存中的虚拟数据表,保存了满足查找条件的所有记录。记录集结构图 Recordset对象的常用属性如下图: (1 1)SourceSource、ActiveConnectionActiveConnection、CursorTypeCursorType、LockTypeLockType属性属性这一组属性主要用于限定记录集的特性,和上一节建立Recordset对象时的参数基本上是一致的。不过它们需要在打开记录集前设置,比如下面就用这几个属性改写上一节建立Recordset对象的方法(3)。 MaxRecords、Filter属性这两个属性都是用来过滤记录集的。其中MaxRecords属性用于设置从数据库取得的记录集的最大记录数目。例如下面的语句将限制最多返回100条记录:Filter属性可以利用条件表达式设置希望显示的记录。例如下面语句将只返回intAge字段大于18并且小于25的记录:18 And intAge (3)RecordCount属性该属性用于返回记录集中的记录总数。例如下面语句将输出记录总数: (4)Bof、Eof属性这两个属性用于判断当前记录指针是否指向记录集的开头或结尾,返回值为True或False。当指针指向开头时,Bof属性的值为True;当指针指向结尾时,Eof属性的值为False。 PageSize、PageCount、AbsolutePage、AbsolutePosition属性这一组属性用来完成分页显示数据的功能。其中PageSize属性用于设置每一页的记录数。例如下面语句将设置每页显示10条记录: PageCount属性:用于返回数据页的总数,如下面语句将输出数据页总数: AbsolutePage属性:用于设置当前指针指向哪一页,如下面语句将指向第2页: AbsolutePosition属性:用于设置当前指针指向的记录行的绝对值,如下面语句将指向第10条记录: 利用这几个属性时一般也要求设置指针类型为1(键盘指针) (6)BookMark属性该属性用于设置或返回书签位置,例如下面语句就可以将当前记录位置保存到一个变量中: 当希望重新指向该记录时,只要将该变量赋值给BookMark属性即可,记录指针就会自动指向书签所在记录。如: Open、Close、Requery方法这一组方法主要是关于Recordset对象本身的。其中Open方法在上一节已经详细讲解过,用于打开一个记录集。Close方法用于关闭记录集。例如: Requery方法用于重新打开记录集,相当于先关闭再打开。例如: MoveFirst、MovePrevious、MoveNext、MoveLast、Move方法MoveFirst方法用于将记录指针移动到第1条记录。MovePrevious方法用于将记录指针向后(或向上)移动一条记录。MoveNext方法用于将记录指针向前(或向下)移动一条记录。MoveLast方法用于将指针移动到最后一条记录。Move方法用于将指针移动到指定的记录。语法为: Recordset对象.Move number,start 其中start表示指针移动的开始位置,如省略默认为当前指针位置;number表示从start设置的起始位置向前或向后移动number条记录 AddNew、Delete、Update、CancelUpdate方法这一组方法用来添加、删除和更新记录。添加记录时一般要同时用到AddNew方法和Update方法,例如: 删除记录时比较简单,首先将指针移动到要删除的记录,然后利用Delete方法就可以删除当前记录,不过还要用Update方法更新数据库。更新记录时首先将指针移动到要更新记录,然后直接给字段赋值,之后使用Update方法更新数据库即可。CancelUpdate方法用来取消刚才添加、删除和更新记录的操作。 Find方法该方法用来查找符合条件的单个记录,语法如下: Recordset对象实例.Find criteria, skipRows, searchDirection, start下面来看两个常用的例子: % rs.Find intAge20 向前查找年龄小于20的人员 rs.Find intAge GetRows方法该方法用来从记录集中当前记录开始返回多条记录,它将符合要求的数据返回给一个二维数组。例如下面语句将从当前记录开始返回10条记录 利用Recordset对象也可以执行查询、添加、删除和更新记录的操作,其中查询记录和之前学的基本一样,而添加、删除和更新记录就要用到上一节讲述的AddNew、Delete和Update方法。 下面请看示例:下面就讲解利用下面就讲解利用RecordsetRecordset对象的对象的AddNewAddNew方法来添加不完整记录的方法。方法来添加不完整记录的方法。 分页显示示意图: 分页显示数据的思想是:首先显示第1页数据,并且在下方提供页码链接,当客户选择页码时,仍然传递到本文件,并显示新的一页。 Field对象又称字段对象,是Recordset的子对象。简单地说:一个记录集就好比一个电子表格,该表格内总是包含有许多列(字段),每一个字段就是一个Field对象,而所有Field对象组合起来就是一个Fields集合。 输出字段值的几种方法:输出字段值的几种方法:Response.Write rs(name) Response.Write rs.Fields(name) Response.Write rs.Fields(name).Value Response.Write rs.Fields.Item(name).Value Response.Write rs(1) Response.Write rs.Fields(1) Response.Write rs.Fields(1).Value Response.Write rs.Fields.Item(1).Value (1)Count属性该属性用于返回Fields集合中Fields对象的数目。语法为:Recordset对象实例.Fields.Count (2)Item方法Fields集合中包含了多个Field对象,而利用Item方法就可以建立每一个Field对象的实例。语法为:Set Field对象实例= Recordset对象实例.Fields.Item(index) 或者Set Field对象实例= Recordset对象实例.Fields.Item(string)FieldField对象常用属性和方法如下:对象常用属性和方法如下: 由于Field对象实在太重要了,因此ASP把它作为默认的了,Fields、Item、Value都可以省略不写。比如,在上面的例子中,其实不需要建立Field对象,直接用如下语句即可输出属性值: 存取SQL Server数据库(以下简称SQL数据库)其实和存取Access数据库是一样的,只是数据库连接字符串略有区别,其他部分基本一样。下面将着重介绍具体的连接方法。假设已经建立了一个SQL数据库Database名称为sqltest,数据库登录账号jjshang,登录密码123456,ODBC数据源名称为test。数据表和字段与Access数据库address.mdb基本相似。 同连接Access数据库一样,也可以省略为:(2)基于ODBC但没有数据源的连接 连接方法如下:其中Server参数表示SQL数据库服务器地址;localhost表示本机,也可以使用127.0.0.1或本机IP地址。如果使用其他服务器上的SQL数据库,只要将localhost替换为该服务器的IP地址即可。 SQL数据库也可以使用SQL Server的OLE DB提供程序连接,例子如下: 连上SQL数据库后,所有操作同Access数据库,程序基本不用改动。需要特别说明的是,在SQL语句中,日期字段值两边的#号要改为单引号。 Access数据库和SQL数据库是可以相互转化的可以将Access数据库导入SQL,或者将SQL数据库导出为Access数据库。 实际开发时,可以先用Access数据库,这样方便些。等基本上开发好后,再导入到SQL数据库中。而要修改的是就是个别字段的类型和连接数据库的语句。 但是SQL数据库还是要稳定些, 大型网站应该采用SQL数据库。 多个表中组合查询数据的情况也就是说从这个表中取若干个字段,再从另一个表中取若干个字段,其实主要用到的就是Select语句中的组合查询语句。下面我们举例说明:建立数据库userinfo.mdb,它包括两张表:表tbUsers包含用户名、密码、真实姓名、性别等字段,表tbLog包括用户名、登录IP、登录时间字段。现在需要从tbUsers中选取用户名和真实姓名,从daylog中选取登录IP和登录时间。具体请看代码。 9.7.1 9.7.1 通讯录的设计通讯录的设计 9.7.2 9.7.2 通讯录的实现通讯录的实现 9.7.3 9.7.3 关于通讯录的讨论关于通讯录的讨论 现在就来综合前两章所学内容,来实现一个功能更为复杂的通讯录。本通讯录要求能够分页、排序显示数据,并在详细页面中显示详细信息,能够添加、更新和删除记录,能够查找记录。实际上就是要将前面所学功能整合到一起。 本通讯录具体包括如下9个文件: address.mdb数据库文件; odbc_connection.asp连接数据库文件; config.asp配置文件,用来声明一些常数; index.asp首页,使用分页和排序显示所有人员信息; particular.asp显示人员详细信息文件; search.asp查找人员文件。 insert.asp添加人员文件; delete.asp删除人员文件; update.asp更新人员信息文件; 下面就简要讲解一下每个文件的重点和难点 (1)数据库连接文件odbc_connection.asp由于很多文件都要用到连接数据库的语句,为了方便,可以将这部分单独保存成一个文件,然后在其他文件中用“”将其包含进来,这就相当于将这些语句直接写在别的文件中。 (2)配置文件config.asp这是一个配置文件,主要用来声明一些常数,在其他文件中也可以用Include语句包含进来。这样做的好处可以方便修改程序中的一些参数。比如如果要修改分页显示数据时每页的记录数,只要修改下面的文件即可。 (3)首页index.asp这是本程序的首页,其中将本章的分页显示数据、排序显示数据、链接到详细页面三个示例整合到了一起。另外,还增加了“添加记录、查找记录、更新记录、删除记录”的超链接。下面是程序代码和运行结果: (4)详细页面文件particular.asp本页面和9.2.5节的详细页面示例基本上是一样的。请大家自己学习体会。 (5)查找人员文件search.asp本页面是在9.2.4节查找记录示例的基础上修改而成的。其中只是将表格等HTML代码都用Response.Write方法输出了,另外,添加了“更新”、“删除”和“详细”超链接,也请大家自己学习体会。 (6)添加人员文件insert.asp和删除人员文件delete.asp这两个页面也很简单,请大家自己学习体会 (8)更新人员信息文件update.asp 本页面实际上是在8.3.4节更新记录示例的基础上修改的,只不过将两个文件合并成了一个文件 ,请看具体代码: 上面的通讯录已经是一个比较实用的数据库程序了。 不过,如果要用在公众网上,还需要解决安全问题。因为现在任何人都可以添加、删除和更新记录。实际上应该加上管理界面,管理员输入密码后才可以删除或更新记录。 此外,本示例在容错性等细节方面考虑还不够,比如在查找记录页面单击“删除”或“更新”超链接,执行完毕后不会返回本页面,而会直接返回首页index.asp。大家可以结合这两章内容自行完善。 本章主要讲述了ADO的3个对象:Connection、Command和Recordset对象。并分别讲述了它们的3个子对象Error、Parameter和Field对象。 关于本章,希望大家重点掌握的是3个对象的概念和彼此的关系,以及使用事务处理,分页显示数据、从多个表中组合查询 等知识点,并且要认真体会最后一个综合示例。 本章内容确实非常庞杂,不过大家不用担心,在实际开发中只要使用最常用的方法即可。
展开阅读全文