使用ADO组件访问数据库.ppt
第8章 使用ADO组件访问数据库ADO组件是ASP访问数据库最方便的工具。本章首先简单介绍数据库标准语言SQL的使用,然后讲解如何在Windows 2000配置Microsoft Access和SQL Server数据库。根据ASP访问数据库的方式,依次讲解ASP的Connection、Command、Recordset对象。8.1 SQL简介SQL(Structured Query Language,结构化查询语言)是数据库的标准语言。在ASP中,无论何时访问一个数据库,都要使用SQL语言。因此,读者如果要精通ASP编程,必须掌握好SQL语言。SQL语言是数据库的标准语言,应用非常简单,但是这并不意味着能轻松的掌握它。SQL数据库中的数据都存储在数据表中。一般所谓的将信息存储在数据库中,实际上就是将信息存储在数据表中。当考虑怎样把信息存储在数据库中时,就相当于是在考虑怎样把它们存储在数据表中。(具体内容请参照本书)8.1.1 数据库查询SQL的主要功能之一就是数据库查询,即从数据表中查询满足条件的记录。在SQL中,使用Select语句完成数据库的查询操作。语法如下:Select 字段1,字段2,from 数据表(where 满足的条件)(具体内容请参照本书)8.1.2 查询结果排序SQL的突出特点是数据表中没有内在的顺序。从一个表中取第二个记录是没有意义的。从SQL的角度来看,没有任何一个记录在其他记录之前。不过可以使用Order by子句来操纵一个SQL查询结果的顺序。Order by默认为升序排列,如果要降序排列,可以加Desc关键字。将8.1.1节的查询结果按照UserName的升序排列,代码如下:(具体内容请参照本书)8.1.3 插入、删除和更新记录在SQL中,可以对表的记录进行各种操作,包括插入、删除和更新记录等。下面将分别讲述这三种操作。在表中插入一条记录,一般使用SQL语言中的Insert语句。语法如下:Insert Into 数据表(字段1,字段2)values(字段1的值,字段2的值)(具体内容请参照本书)8.1.4 存储过程存储过程也称为存储查询。它是存储在数据库中预先定义的SQL语句。它将常用的或很复杂的工作,预先用SQL语句写好并用一个指定的名称存储起来。使用时,只需调用该存储过程,即可自动完成命令。现在的程序员都利用创建和使用存储过程从而取代在代码中直接使用SQL字符串,这样做是因为存储过程具有以下优点:(具体内容请参照本书)8.2 ADO概述ADO全称为ActiveX Data Object,它是一项数据库访问技术。它提供了网页开发人员实时存取数据库的能力。在数据库的应用中,使用ADO编写的应用程序可以存取在Internet上任何地方的资源。例如,可以在家中通过浏览器填写购物单,购买千里之外的物品。ADO非常简化的接口使得原本复杂冗长的程序编写工作变得简单易学,并且强有力地支持了各种应用程序的复杂特性的需求。ADO使用RecordSet(记录集)对象作为数据的主要界面。ADO可以使用VBScript、JavaScript等脚本语言来控制数据库的存取以及输出查询结果。8.2.1 ADO的对象在ADO中包含以下七种对象:1Connection对象2Command对象3RecordSet对象4Parameter对象5Field对象6Error对象7Property对象8.2.2 ADO的操作流程典型的ADO操作流程如下:(1)连接到数据源。(2)指定访问数据源的命令,可以同时指定变量参数,通常涉及到Command对象。(3)执行命令,例如一个Select脚本。(4)如果命令使数据按表中的行的形式返回,则将这些行存储在易于检查、操作或更改的缓存中。(5)在适当情况下,可以通过修改缓存行的内容来更新数据源。(6)提供常规方法检测错误,涉及Error对象。在典型情况下,需要在编程过程中采用所有这些步骤。但是,由于ADO有很强的灵活性,所以最后只需执行部分模块就能做一些有用的工作。8.3 创建ODBC DSN文件作为创建数据连接的一部分,需要添加数据源的名称。数据源名称DSN(Data Source Name)存储有关如何连接到指定提供者的信息。一个DSN指定了数据库的物理位置、用于访问数据库的驱动程序的类型和访问数据库的驱动程序所需要的任何其他参数。下面将讲解如何配置Microsoft Access数据库和SQL Server数据库的DSN。8.3.1 配置Microsoft Access数据库文件的DSNODBC数据源管理器提供三种不同类型的DSN:用户DSN、系统DSN和文件DSN。用户DSN在Windows NT系统注册表中存储如何与指定数据提供者连接的信息,用户DSN只对当前用户可见,而且只能用于当前机器上。系统DSN也在系统注册表中存储数据库的信息,系统DSN添加的数据源本机上的所有用户都可以看到。文件DSN是一个文本文件,它包含数据库的连接信息,该文件保存在计算机中,而且可以通过复制轻易地从一个服务器转移到另一个服务器。在Window 2000/XP下,打开【控制面板】窗口,如图8-1所示,就可以创建基于DSN的文件了。(具体内容请参照本书)8.3.2 配置SQL Server数据库文件DSN下面使用SQL Server的ODBC默认设置,来配置SQL Server的数据库文件。(具体内容请参照本书)8.3.3 连接数据库在ASP中,连接数据库有两种方式,一种是通过数据库文件DSN连接数据库,另一种是直接连接数据库。这两种方式都需要用到ADO的Connection对象。下面首先来看一下如何使用第一种方式来连接数据库。通过数据库文件DSN来连接数据库,首先要配置数据库文件DSN,这在8.3.1节和8.3.2 节已经讲述了,并且已经建立了一个系统DSN,并命名为search,那么连接代码如下所示。(具体内容请参照本书)8.4 使用Connection对象与数据库的所有通信都要通过一个打开的连接来进行。在对数据库进行数据的插入和读取之前,必须先打开与这个数据库的连接。本节将介绍Connection对象的属性和方法,以便管理数据库的连接。8.4.1 Connection对象的属性和方法Connection对象提供了丰富的属性和方法,用来创建、保存和设置连接信息。表8-2列举了Connection对象的属性。(具体内容请参照本书)8.4.2 打开和关闭数据库连接Connection对象使用Open()和Close()方法来打开和关闭数据库的连接。要打开数据库,首先要创建Connection对象的一个实例,然后调用Connection对象的Open()方法。当结束对数据库的操作之后,再调用Connection对象的Close()方法关闭数据库连接。以下代码为一个打开和关闭数据库连接的例子。(具体内容请参照本书)8.4.3 执行SQL语句通过Connection对象执行SQL语句,要使用Execute()方法。这个方法的语法有两种形式。当从数据库中不返回结果时,语法如下:Connection.Execute CommandText,RecordsAffected,Options当从数据库中返回结果时,语法如下,它返回一个RecordSet对象:Set Recordset=Connection.Execute(CommandText,RecordsAffected,Options)(具体内容请参照本书)8.4.4 处理事务所谓的事务就是一组语句的整体。当作为事务处理时,这组语句中有一条语句没有成功执行,则所有的语句都被取消执行。例如,当假如某人在银行取钱时,取钱和帐户更新两个操作任意一个出现错误时,另一个操作都将会取消执行,但是如果不采用事务处理,则当该人取了钱之后,帐户更新出现错误,银行最后的记录是该人取了钱,但是帐户上的金额没有减少,这就导致数据的不正确。可见,采用事务处理是非常有用的,它能保证数据库操作的完整性、准确性。(具体内容请参照本书)8.4.5 设置连接数据源或提交命令的等待时间为了防止在连接应用程序的用户过多时,导致网络堵塞或服务器负载过重,可以使用Connection对象的ConnectionTimeOut属性来设置连接数据源的等待时间,使用CommandTimeOut属性设置提交命令的等待时间。下面的脚本设置ConnectionTimeOut属性,在取消连接尝试之前等待10秒。打开Connection对象之后,设置了CommandTimeOut属性,在取消执行命令之前等待10秒。具体代码如下:(具体内容请参照本书)8.5 使用Command对象Command对象是为处理各种类型的命令而设计的,特别是为那些需要参数的命令。与Connection对象相似,Command对象也可以分为返回运行记录集和不返回运行记录集两种类型的命令。实际上,如果命令不含有参数,那么它并不关心是使用Connection对象、Command对象或者RecordSet对象。8.5.1 Command对象的属性和方法Command对象的属性和方法相对来说比较少。它的属性见表8-4所示。(具体内容请参照本书)8.5.2 执行SQL语句在前面编者已经介绍了如何用Connection对象的Execute()方法执行SQL语句。使用Command对象执行SQL语句,就是将SQL语句赋值给Command对象的CommantText属性,然后执行Execute()方法。同样,Command对象的Execute()方法也有两种形式:不返回记录集的语法如下:Command.Execute RecordsAffected,Options返回记录集的语法如下:Set Recordset=Command.Execute(RecordsAffected,Options)(具体内容请参照本书)8.5.3 调用存储过程在8.4节知道,使用Connection对象的Execute()方法能够执行SQL语句,那么为什么还要使用Command对象呢?这是因为使用Command对象有一个主要的优点,就是可以调用存储过程。Example8.asp是一个调用存储过程的例子。首先在SQL Server 2000中建立一个名为sp_myproc的存储过程,代码如下:(具体内容请参照本书)1使用存储过程的返回值2输出参数和输入参数8.6 使用RecordSet对象RecordSet对象(记录集对象)是ADO中最常用的对象,是用于保存查询数据的重要对象。下面首先来了解一下RecordSet对象中涉及到的一些概念。8.6.1 RecordSet对象中的一些概念1RecordSet(记录集)2游标3锁定类型4书签8.6.2 RecordSet对象的属性和方法RecordSet对象有许多属性和方法。它的这些属性和方法为程序员编程带来了很大的方便。下面编者只列举了RecordSet对象部分经常使用的属性和方法。RecordSet对象的属性见表8-4所示。(具体内容请参照本书)8.6.3 创建记录集一般使用RecordSet对象的Open()方法创建一个记录集。Open()方法的语法如下:RecordSet.Open Source,ActiveConnection,CursorType,LockType,_Options 表示为可选的参数。其中,Source表示数据源,可以是数据库中的表名、存储过程、SQL语句或Command对象。ActiveConnection表示记录集使用的连接,可以是一个连接字符串或者一个创建的Connection对象。CursorType是使用的游标类型,LockType是使用的锁定类型,这两个参数的定义见8.6.1节。Options用来通知提供者Source参数的内容是什么,如表、文本字符串等。(具体内容请参照本书)8.6.4 显示记录集创建记录集之后,就要显示记录集中的记录。显示记录集需要用到RecordSet对象的多个属性和方法,其中用的最多的是EOF、BOF、MoveNext()、RecordCount等。显示记录集的方法有多个,主要是采用循环语句来实现。首先来看使用Do While循环语句来显示记录集。Example16.asp实现了一个记录集在页面上的显示。首先在Do While条件语句中判断当前指针所指的记录是否已经超出该记录集的范围,如果超出范围,在跳出循环。如果没有超出范围,则读取并显示某一记录的值,然后使用MoveNext()方法指向下一条记录。例如,Example16.asp代码如下:(具体内容请参照本书)8.6.5 实现记录集的分页显示在网站搜索或用户管理时,如果记录数非常多,把这些记录显示在一页上,是非常不明智的,浏览的时候非常不方便。这时可以采用分页显示记录的方法。将数据库的查询结果分页显示的方法很多,但是主要有下面两种:将数据库中所有符合查询条件的记录一次性的都读入RecordSet中,存放在内存中,然后通过ADO RecordSet对象所提供的三个专门支持分页处理的属性:PageSize(逻辑页中记录个数)、PageCount(逻辑页数目)以及AbsolutePage(当前页)来实现分页显示。根据客户的指示,每次分别从符合查询条件的记录中将规定数目的记录数读取出来并显示。8.6.6 读取记录到数组中在特定情况下,需要把记录集读取到数组中。例如,需要修改一个记录集中的数据,但又不想改变记录集中的记录本身,这时可以把记录读取到数组中。要把记录集中的记录分配给一个数组,应使用RecordSet对象的GetRows()方法。Example19.asp使用GetRows()方法创建了一个数组并将记录集中的记录分配给数组,最后在网页上显示这个数组中的所有记录。具体代码如下:(具体内容请参照本书)8.7 本章小结在这一章具体讲述了在ASP中如何使用ADO组件访问数据库,其中包括数据库的配置和连接,ADO三个重要对象:Connection对象、Command对象和RecordSet对象的属性和方法及其用法。