第 8章 用 ASP访问与操作数据库
本章学习要点,
ActiveX数据对象
连接对象的基本功能, 方法及属性
记录集对象的方法, 属性及集合
记录集对象的分页显示功能
命令对象的主要方法及属性
存储过程
本节内容,
l ASP访问数据库的方式
l ODBC数据源的创建和配置
l ADO七个对象和四个集合的主要功能
l 数据库操作的基本步骤
8.1 ActiveX数据对象
? 8.1.1 ASP访问数据库的方式
前面已经介绍过, 在传统的静态网页中,
访问数据库一般是通过公用网关接口 ( CGI)
来实现, 这种方式不仅开发困难, 而且在出现
大量并发请求时会显著地降低服务器的运行效
率, 而采用 ASP实现数据库访问可以说能较好
地解决这个问题 。 在 ASP脚本中可以通过三种
方式访问数据库,
l IDC( Internet Database Connector) 方式
l ADO( ActiveX Data Objects) 方式
l RDS( Remote Data Service) 方式
从概念上来讲, 这三种访问方式对数据
库的访问都是由 IIS来完成的 。 Web浏览器用
HTTP协议向 IIS递交请求 。 Internet信息服务
器执行访问数据库的操作, 并以一个 HTML
格式的文档作为回答 。
( 1) Internet数据库接口 ( IDC)
IDC是一个传统的数据库查询工具,用来
定义和执行数据库查询的 SQL命令,并向浏
览器返回一个指定数据格式的页面。虽然使
用 IDC访问数据库十分简单,几乎不需要编程
就能实现对数据库的访问。但 IDC缺乏使用上
的灵活性,IDC只能简单的创建 IDC(,idc)
文件和 HTML扩展文件 (,htx) 两种文件, 然
后等待 IDC文件被请求, 分别完成数据库的
访问与输出任务 。 因此这种方式限制了对数
据库的交互控制, 同时 IDC还有缺少任何游
标的缺点 。
( 2) ActiveX数据对象 ( ADO)
与 IDC不同, 用 ADO访问数据库更类似
于编写数据库应用程序, ADO把绝大部分的
数据库操作封装在七个对象中, 在 ASP页面
中编程调用这些对象执行相应的数据库操作 。
ADO是 ASP技术的核心之一, 它集中体现了
ASP技术丰富而灵活的数据库访问功能 。
正是因为使用 ADO需要编写脚本程序, 所
以 ADO能够实现更复杂, 更灵活的数据库访
问逻辑 。 目前, ADO 包括 Command、
Connection,Recordset等七个对象和一个动态
的 Properties集合, 绝大部分的数据库访问任务
都可以通过它们的组合来完成 。
一般使用 ADO访问数据库的 ASP脚本程
序应该使用 Connection对象建立并管理与远程
数据库的连接;使用 Command对象提供灵活
的查询;而使用 Recordset对象访问数据库查询
所返回的结果。这三者是 ADO中最基本也最
核心的对象。
(3) 远程数据服务 ( RDS)
RDS是 IIS 1.0中新提出的概念, 它是由
ASP中原来的 Advanced Data Connector( ADC)
发展而来的 。 在 IIS 1.0中, RDS与 ADO集成到
一起, 使用同样的编程模型, 提供访问远程
数据库的功能 。
ADO能够提供非常强大的数据库访问功
能,但是它不支持数据远程操作( Data
Remoting)。 换句话说,ADO只能执行查询
并返回数据库查询的结果,这种结果是静态
的,即客户端需要修改数据库中的数据,必
须通过相应的 SQL语句提出修改数据请求,才
能修改服务器端数据库中的内容。
服务器上的数据库与客户端看到的数据没有
,活的连接关系, 。
RDS就比 ADO更进一步,它支持数据远
程操作。它不仅能执行查询并返回数据库查
询结果,而且这种结果是, 动态的,,服务
器上的数据库与客户端看到的数据保持, 活
的连接关系, 。即把服务器端的数据搬到客
户端,在客户端修改数据后,调用一个数据
库更新命令,就可以将客户端对数据的修改
写回服务器端的数据库,就象使用本地数据
库一样。 由于 RDS与 ADO集成,RDS的底层
是调用 ADO来完成的,所以也可以将 RDS理
解为 ADO的 RDS,即 ActiveX数据对象的远程
数据服务。
RDS在 ADO的基础上通过绑定的数据显示和
操作控件, 提供给客户端更强的数据表现力
和远程数据操纵功能 。 可以说 RDS是目前基
于 Web的最好的远程数据库访问方式 。
OLE DB( Object Linking & Embedding
Database) 和 ADO是 Microsoft公司为适应网
络迅速发展的需要而开发的最新数据访问编
程接口。 OLE DB和 ADO都作为 SQL Server 7
的一部分提供。 Microsoft公司已经把 OLE
DB定位为 ODBC( Open Database Connectivity)
的继承者。 ODBC是基于 SQL的,主要用于
处理关系型数据库,可以很好地用于关系型
数据库 的访问,对于非关系型数据库就无能
为力了。
OLE DB作为一个最新数据访问接口, 除
提供对关系型数据库的访问之外, 还可以访
问非关系型数据库和其他的一些资源, 如像
Excel电子表格中的数据, 访问电子邮件等 。
ADO是一个 OLE DB 使用者,它提供了对
OLE DB数据源的应用程序级访问。在 ASP中,
可以使用 ADO通过 OLE DB的数据库驱动程
序直接访问数据库,也可以编写紧凑简明的
脚本以便连接到 ODBC兼容的数据库,这样
ASP程序员就可以访问任何与 ODBC兼容的数
据库,如 SQL Server,Oracle,Access等。
以上就是 ASP访问数据库的三种方式,它
们三者各有各的特色。 IDC十分简单,使用,idc
文件和,htx文件分别完成数据库的访问与输出
任务,但是使用起来不灵活。 ADO是 ASP中推
荐使用的方式,它功能强大,使用方便,是 ASP的
核心技术之一,但是它在提供用户远程操作数
据库的功能时,比较复杂,实现起来有一定的难
度。在 ASP中,如果不做说明,使用 ADO访问
数据库将默认为 OLE DB的 ODBC驱动程序,
但也可以通过 OLE DB 的其它数据库驱动程序
直接绑定到指定的数据库。而 RDS是基于
ADO的,并提供远程操作数据库的强大工具。
所以在需要提供高性能、高可靠性的远程数据
操作功能时,RDS是更为理想的选择。
?8.1.2 ActiveX数据对象描述
ActiveX数据对象( ADO) 是一种既易于
使用又可扩充的技术,用来将数据库访问添
加到 Web页中,可以使用 ADO编写简洁和可
升级的脚本以连接到与应用程序编程接口
OLE DB兼容的数据源,如数据库、电子表格、
顺序数据文件或电子邮件目录。
OLE DB用来连接各种不同的数据库。
OLE DB如何从数据库中读数据,读出的数据
是什么类型,程序开发者不需要确切的了解
OLE DB的内部结构,只需要知道如何利用它
去连接数据库就可以了。
ADO对象通过 OLE DB从对应的数据库中
取得所需要的数据后,在服务器端生成相应的
ASP网页后,通过 Internet将用户所需的网页传
送到用户浏览器中显示出来。
ADO的特点就是执行速度快、使用简单、
低内存消耗且占用硬盘空间小,所以非常适合
于作为服务器端的数据库访问技术。
Activex数据对象共有七种独立的对象 。
( 1) Connection对象 ( 连接对象 ),是 ADO
的首要对象, 它建立与数据源的连接, 管理
程序对数据的一切操作 。 对数据源的任何操
作都需要建立一个 Connection对象, 因此
Connection对象是 ADO 的基础 。
( 2) Recordset对象(记录集对象):用来管
理某个查询返回的记录集以及记录集中的游
标。可以在非显示建立 Connection对象的情
况下,直接打开一个带查询的结果集,或是
对应着 Command对象的查询返回结果集。
( 3) Field对象 ( 列对象 ),代表一个记录集
中的一个列 。 通过该对象可以取得一个记录
集内不同列的值 。
( 4) Command对象(命令对象):是管理查
询命令的对象。它定义将对数据源执行的命
令,可以接受 SQL命令、表的名称和存储过程
的名称。通过对 SQL服务器的查询和存储过程
的调用,Command对象有强大的数据库访问
能力,既可以完成对数据库的插入、删除和
访问等无需返回结果的操作,也可使用 Select
语句返回一个记录集。
( 5) Property对象 ( 属性对象 ),一个 ADO
对象一般包含两种类型对象属性:固有属性
和动态属性 。 固有属性不作为 Property对象出
现在 Properties集合中, 当创建 ADO对象后,
这些属性可立即使用, 如 Recordset对象的
EOF和 BOF属性;而动态属性则由数据提供
者定义, 这些属性包含在 Properties集合中 。
( 6) Parameter对象(参数对象):代表
SQL存储过程或有参数查询中的一个参数。
用来传递参数该指定的 SQL查询。
( 7) Error对象 ( 错误对象 ),代表对 ADO对
象操作时所发生的错误信息 。
ADO四个集合的简单描述,
( 1) Properties集合:所有 Property对象的集合 。
Properties 集合用来保存与 Connection、
Command,Recordset和 Field对象有关的各个
Property对象 。
( 2) Parameters集合:所有 Parameter对象的集
合 。 Command对象中包含有一个 Parameters
集合
( 3) Fields集合:所有 Field对象的集合。该集
合关联着一个 Recordset对象的所有列。记录
集中返回的每一列在 Fields集合中都有一个相
关的 Field对象。
( 4) Errors集合:所有 Error对象的集合。对
ADO对象的操作可能产生一个或多个错误,
每当错误发生时,就将一个或多个 Error对象
放置到 Connection对象的 Errors集合中。枚举
该集合中的指定错误可使错误处理程序更精
确地确定错误产生的来源及其原因,并采用
相应的措施解决这些出现的问题。
详细问题请参阅 图 8-2 ADO对象与集合之
间的关系
?8.1.3 使用 ActiveX数据对象
要使用 ADO,必须首先在服务器端配置好
要连接的数据源 。 通过该数据源, 使用 ADO就
可以对数据库进行读写操作 。
1 ODBC概述
通常每种数据库都提供自己的编程接口,
这样可以免除编程人员所需要熟悉并掌握每一
个使用到的数据库编程接口之苦。为此
Microsoft开发了一套用于开发数据库系统应用
程序的编程接口规范( API),即 ODBC,它是
目前最流行的连接数据源的方法之一。无论对
于本地数据库还是 C/S或 B/S数据库管理系统,
只要系统中有相应的 ODBC驱动程序, 就可以
通过 ODBC与之连接并访问数据库中的信息 。
如可以连接 Access,SQL Server,Oracle、
Informix等各种支持 ODBC的数据库 。
在创建数据库脚本之前,必须提供一条使
ADO定位、标识和与数据库通讯的途径。即
在 ODBC中添加相应的数据库驱动程序,并创
建相应的 DSN。 也就是说数据库驱动程序使用
DSN( Data Source Name,数据源名)定位和
标识特定的 ODBC兼容数据库,将信息从 Web
应用程序传递给数据库。
典型情况下, 数据源包含了用户安全性,
数据库定位和连接参数等与数据库进行连接
的信息, 且可以获取 Windows NT 注册表项中
或文本文件的表格 。 换句话说, DSN是一个
代表 ODBC连接的符号 。 它隐藏了诸如数据
库文件名, 所在目录, 数据库驱动程序, 用
户 ID,密码等细节 。 因此, 当建立一个连接
时, 不必去考虑数据库文件名, 它在哪儿等
等, 只要给出它在 ODBC中的 DSN即可 。
例如系统中有 ACCESS的 ODBC驱动程序,
就不需要用 ACCESS软件,便可以在程序中
往一个 ACCESS的 MDB数据库中增、删、改
记录,而且根本不用知道这个数据库放在哪
里。
在给 ODBC驱动程序传 SQL 语句时, 用的是
DSN来告诉用户到底操作的是哪一个数据库 。 如果
数据库的平台变了, 例如改用 SQL SERVER的数据
库, 只要表的结构没变, 就不用改写程序了, 只需
要重新配置 DSN就可以了 。
由此可见, DSN是应用程序和数据库之间的桥梁,
要通过 ODBC访问数据库, 前提是必须配置好 DSN。
一个 DSN必须包含以下信息,
l DSN名:在程序中访问数据库时, 向系统传递的名
字, 不是数据库实际名字 。
l ODBC驱动程序:在要操作数据库时, 系统需要调
用相应的 ODBC驱动程序来服务 。
l 要连接的数据库或数据库服务器的名称:指定要连
接的数据库。不同的数据库系统用于指定名字和方
法有些不同。
通过 ODBC,可以选择希望创建的 DSN类
型 —— 用户、系统或文件。用户和系统 DSN信
息存储在 Windows NT注册表中。系统 DSN允许
所有的用户登录到特定的服务器上去访问数据
库,而用户 DSN只能以指定的用户安全身份证
明(用户名和密码)连接到指定数据库。文件
DSN将连接情况存储在一个文件中,只有对该
文件有访问权限的用户才能够连接到指定的数
据库。网络上,为了让所有用户通过 ODBC访
问数据库,需要创建系统 DSN。
2 创建和配置 ODBC数据源
在 Windows NT/2000中, 设定 Web服务器
使用的数据源名称 ( DSN) 时, 必须建立系统
DSN,才能确保所有的 Web用户都可以使用该
DSN 连接到指定的数据库 。 下面以 VOD点播
中所用的数据库系统 VOD为例, 介绍建立
ODBC数据源的步骤,
单击, 开始, →, 设置, →, 控制面板,
(或双击桌面上, 我的电脑, 图标,并双击随
之出现的, 控制面板, 图标),出现, 控制面
板, 对话框;再双击, 管理工具, 图标,出现
,管理工具, 对话框;接下来双击, 数据源
( ODBC),图标,出现, ODBC数据源管理器,
属性页,选择, 系统 DSN”选项卡,进入设置
系统 DSN的操作界面。在该窗口的, 系统 DSN”
列表框中显示该系统中
已经安装的 ODBC数据源的有关信息。
当要建立的数据源不存在时,就可以在上
点击, 添加, 按钮,此时弹出, 创建新数据
源, 对话框。
在其中选择要添加的数据源的驱动程序,
此处要连接的数据库是由 SQL Server创建的,
故选择, SQL Server”项,点击, 完成, 按钮,
弹出, 建立新的数据源到 SQL Server”向导的
第一页,再按照以下步骤建立 ODBC数据源,
( 1)设置数据源名称和服务器
( 2) 设置数据源身份验证
( 3)设置连接数据库
( 4) 设置数据格式和日志
( 5) 完成设置并测试
示例图片及详细内容请参阅书中八章资料。
?8.1.4 数据库操作的基本步骤
操作数据库的方法如下,
( 1) 打开连接
ADO打开连接的主要方法是使用
Connection.Open方法。另外也可以在同一个操
作中调用快捷方法 Recordset.Open打开连接,并
在该连接上发出命令。
( 2) 创建命令
查询命令要求数据源返回含有所要求记录
行的 Recordset对象 。 命令通常使用 SQL编写 。
( 3) 执行命令
返回 Recordset的方法有三种,
Connection.Execute,Command.Execute 以及
Recordset.Open。
注意, 必须在执行命令之前打开与数据库
的连接, 不同执行命令的方法在执行命令时连
接数据库的方式有所不同,
lConnection.Execute方法 使用由 Connection对象
本身表现的连接 。
lCommand.Execute方法 利用其 ActiveConnection
属性中所设置的 Connection对象来表现连接 。
Recordset.Open 方法 可 通 过 其
ActiveConnection属性来连接 Connection对象 。
这里的 ActiveConnection参数可以是一个指定
的 Connection对象名称或者是一串包含数据库
信息的字符串参数。
另一个不同是命令在三种方法中的指定方
式不同:在 Connection.Execute方法中, 命令
是字符串;在 Command.Execute方法中, 命令
在 Command.Command-Text 属性中指定;在
Recordset.Open方法中, 命令是 Source参数,
可以是字符串或 Command对象 。
另一方面,Open方法允许指定 CursorType
和 LockType属性; Execute方法既可执行不返
回数据的命令也可返回快速只读、仅向前
Recordset对象。
( 4) 操作数据
大量 Recordset对象方法和属性可用于对
Recordset数据行进行检查, 定位以及操作 。
Recordset可看作行数组,在任意给定时间可
进行测试和操作的行为“当前行”,在
Recordset中的位置为“当前行位置”。每次移
动到另一行时,该行将成为新的当前行。
有多种方法可在 Recordset中显示移动或
,定位, ( Move方法 ) 。 一些方法 ( Find
方法 ) 在其操作的附加效果中也能够做到 。
此外, 设置某个属性 ( Bookmark属性 ) 同
样可以更改行的位置 。
Recordset有一个 Fields集合,它是在行
中代表每个字段或列的 Field集,可从 Field对
象的 Value属性中为字段赋值或检索数据。
作为选项,可访问大量字段数据( GetRows
和 Update方法)。