第 7 章 asp 访问数据库

115
1 1 第 7 第 ASP 第第第第第 7.1 第第第第第 7.2 ADO 第第第第第 7.3 第第第第第 7.4 第第第第第

Upload: blaine

Post on 22-Jan-2016

164 views

Category:

Documents


0 download

DESCRIPTION

第 7 章 ASP 访问数据库. 7.1 数据库简介 7.2 ADO 访问数据库 7.3 数据库连接 7.4 数据库操作. 1. 学习目标. 介绍了 ASP 的数据库相关操作,包括 ADO 数据库开发原理、数据库连接、 Command 对象和 RecordSet 对象等数据库开发技术基础,使读者能够灵活运用这些基本技术开发实用信息系统,实现以下目标。 了解 ADO 对象模型 掌握 OLEDB 和 ODBC 连接数据库的方法 掌握使用 Connection 对象连接数据库 掌握 RecordSet 对象显示、修改和删除数据的方法 - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: 第 7 章  ASP 访问数据库

11

第 7 章 ASP 访问数据库

7.1 数据库简介7.2 ADO 访问数据库7.3 数据库连接7.4 数据库操作

Page 2: 第 7 章  ASP 访问数据库

22

学习目标介绍了ASP 的数据库相关操作,包括 ADO 数据库开发原理、数据库连接、 Command对象和RecordSet 对象等数据库开发技术基础,使读者能够灵活运用这些基本技术开发实用信息系统,实现以下目标。

了解 ADO 对象模型掌握 OLEDB和ODBC 连接数据库的方法掌握使用 Connection 对象连接数据库掌握 RecordSet 对象显示、修改和删除数据的方法掌握 Command对象的使用

Page 3: 第 7 章  ASP 访问数据库

33

7.1 数据库简介

数据库( Database )是指长期存储在计算机内的,有组织的,可共享的、可以表现为多种形式的数据集合。它的产生距今有六十年了。随着信息技术的发展,特别是二十世纪九十年代后,数据管理不再仅仅是存储和管理数据,已经转变成为了用户所需要的各种数据管理的方式。数据库系统都在各行各业都得到了广泛的应用。

Page 4: 第 7 章  ASP 访问数据库

44

7.1.1 数据库技术的基本概念

数据 数据是指人们用来反映客观世界而记录下来的可以鉴别的数字、字母或符号,可以存储在某一种媒体上被识别。

数据的概念包含两层意思: 一是描述事物特性的数据内容,也就是我们常说的信息, 二是存储在某一种媒体上的数据形式,即符号。

数据处理 数据处理是指对数据的采集、存储、检索、加工、变换和传输的过程。

数据处理的基本目的是从大量的、可能是杂乱无章的、难以理解的数据中抽取并推导出对于某些特定的人们来说是有价值、有意义的数据。数据处理贯穿于社会生产和社会生活的各个领域。数据处理技术的发展及其应用的广度和深度,极大地影响着人类社会发展的进程。

Page 5: 第 7 章  ASP 访问数据库

55

数据库( DB ) 数据库( DataBase ,简称 DB ),是指长期存储在计算机内的,有组织的,

可共享的、可以表现为多种形式的数据集合。数据库能为各种用户共享,具有较小冗余度、数据间联系紧密而又有较高的数据独立性。

数据库管理系统( DBMS ) 数据库管理系统( DataBase Management System ,简称 DBMS )是

位于用户与操作系统( OS )之间的一层数据管理软件。正如使用高级语言需要解释 /编译程序的支持一样,使用数据库语言也需要一个特定的支持软件,这就是 " 数据库管理系统 "。 DBMS 能为用户或应用程序提供访问数据库的方法,包括数据库的建立、查询、更新及各种数据控制等。

DBMS 的主要功能包括:( 1 )数据定义功能( 2 )数据操纵功能( 3 )数据库运行控制功能( 4 )数据库的建立和维护功能

Page 6: 第 7 章  ASP 访问数据库

66

数据库系统( DBS ) 数据库系统 (DataBase System, 简称 DBS) 是实现有组织地、动态地存储大量关联数

据、方便多用户访问的计算机硬软件和数据资源组成的系统,即采用数据库技术的计算机系统。 DBS 一般由数据库、数据库管理系统(及其开发工具)、应用系统、数据库管理员和用户构成。

与文件系统相比, DBS 包含如下特点:( 1 )数据的结构化。( 2 )最小的冗余度。( 3 )数据的共享。( 4 )数据与程序独立。( 5 )数据的安全性和完整性。

数据模型 数据模型是指能表示实体类型及实体间联系的模型。 目前有两种数据模型被广泛使用。

一种是概念数据模型,概念数据模型是指独立于计算机系统的数据模型,它完全不涉及信息在计算机中的表示,只是用来描述某个特定组织所关心的信息结构。

另一种是逻辑数据模型,逻辑数据模型是直接面向数据库的逻辑结构,它是对现实世界的第二层抽象。

Page 7: 第 7 章  ASP 访问数据库

7

7.1.2 数据库技术的发展简史

人工管理文件管理数据库管理

在该阶段,用户把数据集中存放在一个或多个数据库中,然后通过数据库管理系统来使用数据库中的数据。

这是目前最为流行的数据管理方式。

Page 8: 第 7 章  ASP 访问数据库

88

7.1.3 数据库系统的组成

数据库系统是指采用数据库技术的计算机系统。数据库系统一般由支持数据库运行的软硬件、数据库、数据库管理系统、数据库管理员和用户等部分组成的,如图 7-4 所示。数据库应用系统数据库管理系统操作系统硬件数据库管理员用户

数据库应用系统

数据库管理系统

操作系统

硬件

数据库管理员

用户

Page 9: 第 7 章  ASP 访问数据库

99

7.1.4 数据库系统的体系结构 Client/Server结构

客户机 /服务器( Client/Server ,简称 C/S )模式也称 C/S结构,是 20 世纪 80年代末才逐步发展起来的一种模式。

C/S结构的关键在于功能的分布,即一部分功能在客户机上运行,而将另一部分功能则在服务器上运行。这种功能的分布的模式解决了计算机系统的各种瓶颈问题。

C/S结构中,服务器数据库通常采用采用大型数据库系统,如 ORACLE、 SYBASE、InfORMix 或 SQL Server 等。但客户端必须安装专用的客户端软件。

Browser/Server结构 浏览器 /服务器( Browser/Server ,简称 B/S )模式也称 B/S结构。是随着

Internet 技术的兴起逐步发展起来的一种模式,是对 C/S 模式应用的一种扩展。在这种结构下,客户端无需安装专用的客户端软件,只需安装 IE浏览器即可。 B/S 模式最大优点就是运行和维护都比较简单,能使得不同的人员,在不同地点,以不同的接入方式访问和操作共同的数据。

其最大缺点就是对企业外网环境要求较强,只要企业外网中断就会造成系统瘫痪。

Page 10: 第 7 章  ASP 访问数据库

10

7.1.5常见数据库管理系统

大中型关系型数据库管理系统有 SQL Server、 IBM DB2、 Oracle、 SyBase、Informix 等

常用的小型数据库管理系统有Access、 Pradox、 Foxpro 等。

在 ASP 中一般使用 SQL Server或 Access数据库。

本章主要使用 Access 。

Page 11: 第 7 章  ASP 访问数据库

1515

Access 数据库系统简介 Access 是在 Windows 操作系统下工作的关系型数据库管理系统。它采用了Windows 程序设计理念,以 Windows 特有的技术设计查询、用户界面、报表等数据对象,内嵌了 VBA (全称为 Visual Basic Application )程序设计语言,具有集成的开发环境。 Access提供图形化的查询工具和屏幕、报表生成器,用户建立复杂的报表、界面无需编程和了解 SQL语言,它会自动生成 SQL 代码。

Access 被集成到 Office 中,具有 Office 系列软件的一般特点,如菜单、工具栏等。与其他数据库管理系统软件相比,更加简单易学,一个普通的计算机用户,没有程序语言基础,仍然可以快速地掌握和使用它。最重要的一点是, Access 的功能比较强大,足以应付一般的数据管理及处理需要,适用于中小型企业数据管理的需求。

当然,在数据定义、数据安全可靠、数据有效控制等方面 , 它比前面几种数据库产品要逊色不少。

Page 12: 第 7 章  ASP 访问数据库

16

1. 数据库的基本术语 字段、记录、值、表、数据库、数据模型

Page 13: 第 7 章  ASP 访问数据库

17

2. 建立 Access 数据库

规划自己的数据库新建数据库新建和维护表新建和维护查询

Page 14: 第 7 章  ASP 访问数据库

18

(1) 规划自己的数据库

要开发数据库程序,首先要规划自己的数据库,要尽量使数据库设计合理。

主要是规划每一个表的字段和字段类型,不要有冗余。

Page 15: 第 7 章  ASP 访问数据库

19

(2) 新建数据库依次选择菜单命令【开始 →】 【所有程序 →】 【Microsoft Office →】 【Microsoft Office Access 2007】就可以启动Access 2007,然后在出现的主窗口中依次选择【文件 →】 【新建】菜单命令。

空数据库

Page 16: 第 7 章  ASP 访问数据库

20

(2) 新建数据库

Page 17: 第 7 章  ASP 访问数据库

21

( 3 ) 新建和维护表 新建表

在上图双击【使用设计器创建表】选项,就可以打开新建表的设计视图。

主键

Page 18: 第 7 章  ASP 访问数据库

22

新建和维护表( 2 ) 保存表

正确输入所有字段以后,单击 Access 主窗口中的【保确定】按钮 即可。

Page 19: 第 7 章  ASP 访问数据库

23

新建和维护表( 3 ) 在表中输入数据

在主窗口中双击表名,就可以打开输入窗口 ,然后就可以在其中和普通表格一样输入数据。

Page 20: 第 7 章  ASP 访问数据库

24

新建和维护表( 4 ) 修改数据表的设计

单击【设计】按钮,就可以重新打开设计视图,然后就可以继续删除或添加字段,也可以修改数据类型或格式。

Page 21: 第 7 章  ASP 访问数据库

25

( 4 ) 新建和维护查询 查询好比是一张虚拟的表,可以根据需要显示出表中的部分字段或部分记录。

利用查询可以更方便地更改、分析、处理数据。其实查询不仅可以用来显示数据,还可以用来插入、删除、更新记录。

查询有 4 种: 简单查询 组合查询 计算查询 条件查询。

Page 22: 第 7 章  ASP 访问数据库

26

新建简单查询 步骤如下:

在 Access 主窗口创建—右侧选择【查询设计】按钮

–然后双击【在设计视图中创建查询】选项

Page 23: 第 7 章  ASP 访问数据库

27

显示查询内容

成功新建一个查询后,就可以双击查询的名称,打开查询结果了。

Page 24: 第 7 章  ASP 访问数据库

28

利用 SQL 语言建立查询 在建立查询时, 也可以利用写 SQL 语言的方式直接建立。 当选择“在设计视图中创建查询”后,不必自己添加表,直接单击【关闭】按钮,然后在主窗口中依次选择【视图 →】 【 SQL视图】菜单命令, 此时在打开的 SQL视图对话框中,输入查询语句运行即可。

Page 25: 第 7 章  ASP 访问数据库

29

3 、 SQL 语言简介 Select 语句 Insert 语句 Delete 语句 Update 语句

Page 26: 第 7 章  ASP 访问数据库

30

( 1 ) Select 语句

Select 语句主要功能是实现数据库查询,即可以从数据库中查询出符合特定条件的记录(行)或字段(列)。

语法如下: Select [Top 数值 ] 字段列表 From 表

[Where 条件 ] [Order By 字段 ] [Group By 字段 ]

Page 27: 第 7 章  ASP 访问数据库

31

① 简单查询所谓简单查询,指的是不需要使用任何条件,只是简单选取若干字段若干记录。

示例如下: 下面语句可以选取数据表中全部数据

Select * From tbAddress 下面语句可以选取数据表中的前 10条记录

Select Top 10 * From tbAddress 下面语句可以选取指定字段的数据,不过要注意每个字段之间用逗号隔开。

Select strName,strEmail From tbAddress 还可以对若干个字段进行加减乘除等适当的运算后再显示,如下面的语句将产生一个新的字段 NewAge ,它表示用户 10 年后的年龄。

Select strName,(intAge+10) As NewAge From tbAddress

Page 28: 第 7 章  ASP 访问数据库

32

② 条件查询利用 Where 条件子句可以根据条件选取数据。

利用比较和逻辑运算符来构造Where 条件子句。

实例如下: 选取 2010年 11月 1 日之前注册用户的记录:

Select * From tbAddress Where dtmSubmit<#2010-11-1# 查询所有姓名中有“鹏”字的人:

Select * From tbAddress Where strName like '%鹏%' 查询所有男性或者姓“李”的用户:

Select * From tbAddress Where strsex='女 ' or strname like '李%'

Page 29: 第 7 章  ASP 访问数据库

33

③ 排序查询

利用 Order By 字句可以将查询结果按某种顺序显示来。

如果要按多个字段排序,中间用逗号隔开。排序时,首先参考第一字段的值,当第一字段的值相同时,再参考第二字段的值,依此类推。

示例如下: 下面的语句将查询结果按姓名升序排列:

Select * From tbAddress Order By strName ASC 如果要降序排列,则为:

Select * From tbAddress Order By strName DESC 多字段排序

Select * From tbAddress Order By strName ASC, dtmSubmit DESC

Page 30: 第 7 章  ASP 访问数据库

34

④ 汇总查询 许多时候需要将全部或多条记录进行汇总 后查询结果。

Select 语句中提供 Count、 Avg、 Sum、Max和Min五个聚合函数,分别用来求记录总数目、平均值、和、最大值和最小值。

示例如下: 查询数据表中的记录总数。

Select Count(*) As Total From tbAddress 查询所有人的平均年龄。

Select Avg(intAge) As Average From tbAddress 查询所有人的年龄之和。

Select Sum(intAge) As Total From tbAddress 查询最大的人的年龄。

Select Max(intAge) As MaxAge From tbAddress 查询最小的人的年龄。

Select Min(intAge) As MinAge From tbAddress

Page 31: 第 7 章  ASP 访问数据库

35

⑤ 组合查询

组合查询就是要从多个表中组合所需数据查询的结果。

示例如下: 有两张表:用户信息表 tbUsers 、用户登录表

tbLog 下面就利用组合查询显示用户的真实姓名、登录时间和登录 IPSelect tbUsers.strName, tbLog.dtmLog, tbLog.strIP

From tbUsers, tbLog Where tbUsers.strUserId =tbLog.strUserId

Page 32: 第 7 章  ASP 访问数据库

36

⑥ 其他查询

使用 Distinct 关键字可以去掉重复的记录。如: Select Distinct * From tbAddress

许多时候都可以使用 As 关键字指定别名,将来只要引用该别名就可以了。如: Select strName As 姓名 , intAge As 年龄

From tbAddress在组合查询时也可以使用别名,以便简化书写。

如: Select a.strName,b.dtmLog,b.strIP From tbUsers As a, tbLog As b Where a.strUserId=b.strUserId

Page 33: 第 7 章  ASP 访问数据库

37

( 2 ) Insert 语句 在 ASP 程序中,经常需要向数据库中添加数

据,例如向用户表 tbUesrs 中添加新成员的记录。使用 Insert 语句就可以实现该功能。

语法如下: Insert Into 表 ( 字段 1, 字段 2,…) Values( 字段 1 的

值 , 字段 2 的值 ,…)

Page 34: 第 7 章  ASP 访问数据库

38

Insert 语句示例

只添加 strName 字段 Insert Into tbAddress (strName ) Values('萌萌 ')

只添加 strName和 dtmSubmit 字段 Insert Into tbAddress (strName, dtmSubmit ) Values('萌萌 ',#2012-

11-2#)

只添加 strName和 intAge 字段: Insert Into tbAddress (strName, intAge) Values('萌萌 ',16)

在 tbAddress 表中增加一条完整的记录 Insert Into tbaddress

(strname,strsex,intage,strtel,stremail,strintro,dtmsubmit) Values ('萌萌 ','女 ',21,'6112211','[email protected]','金融系同学 ', '2012-8-8')

Page 35: 第 7 章  ASP 访问数据库

39

( 3 ) Delete 语句在 SQL 语言中,可以使用 Delete 语句来删除表中无用的记录。语法如下:

Delete From 表 [Where 条件 ] Delete 语句示例:

删除自动编号字段 ID 等于 1 的用户。Delete From tbAddress Where ID=1

删除 strName为“萌萌”的用户。Delete From tbAddress Where strName='萌萌‘

删除 2008年 10月 1 日前注册,且 strName为“萌萌”的用户。

Delete From tbAddress Where dtmSubmit<#2012-12-1# And strName='萌萌 '

删除表中所有数据。Delete From tbAddress

Page 36: 第 7 章  ASP 访问数据库

40

( 4 ) Update 语句可以使用 Update 语句来实现更新数据的功能,语法如下:

Update 数据表名 Set 字段 1 =字段值 1 ,字段 2 =字段值 2 ,… [Where 条件 ]

Update 语句示例 : 更新自动编号 ID 字段为 2 的用户的电话

Update tbAddress Set strTel='8282999' Where ID=2 更新 strName为 "萌萌 " 的用户的电话和年龄

Update tbAddress Set intAge=22,dtmSubmit='2008-9-8' Where strName =' 萌萌‘

将所有 2008年 1 月 1 日前注册的用户的注册日期更新为2008年 1 月 1 日

Update tbAddress Set dtmSubmit='2008-1-1' Where dtmSubmit<'2008-1-1'

Page 37: 第 7 章  ASP 访问数据库

41

4 、设置数据源

什么是数据源 所谓数据源,就是数据源开放数据库连接

(ODBC ) ,利用它就可以访问来自多种数据库管理系统的数据。

比如,如果你有一个访问 Access 数据库的程序,数据源 (ODBC) 会允许您用同一个程序访问 SQL数据库中的数据。至于具体访问细节你就不用关心,由 ODBC 来完成。

下面以 Windows XP 为例,为数据库address.mdb 中设置数据源。

Page 38: 第 7 章  ASP 访问数据库

42

设置数据源步骤 1

依次选择【开始】、【设置】、【控制面板】、【管理工具】、【数据源( ODBC)】选项。

Page 39: 第 7 章  ASP 访问数据库

43

设置数据源步骤 2

选择【系统 DSN】,然后单击【添加】按钮 ,出现 “创建新数据源”对话框。

Page 40: 第 7 章  ASP 访问数据库

44

设置数据源步骤 3

选择“Microsoft Access Driver (*.mdb)” ,然后单击【完成】按钮,将出现 “ ODBC Microsoft Access 安装”对话框。

Page 41: 第 7 章  ASP 访问数据库

45

设置数据源步骤 4

在上图中输入【数据源名】为“ addr”和【说明】为“通讯录数据库”,并单击【选择】按钮,选择“ d:\aspLX\ch7\address.mdb” ,然后单击【确定】按钮即可。 ( 数据文件绝对路径 )

添加完毕后,可以看到在【 ODBC 数据源管理器】对话框中(就出现了该数据源的名称addr 。

Page 42: 第 7 章  ASP 访问数据库

46

7.2 ADO访问数据库

在 ASP 中内置了许多功能强大的 ActiveX 服务器组件,利用这些组件就可以方便地完成数据库存取、文件存取等功能。

ASP 内置组件基本功能 :

Page 43: 第 7 章  ASP 访问数据库

47

7.2 ADO访问数据库

数据库存取组件( Database Access Component )是使用 ADO( ActiveX Data Objects )技术来存取符合ODBC(Open DataBASE Connectivity )标准的数据库或具有表格状的数据形式(如 Excel文件)的一种 ASP 内置组件,是所有 ASP 内置组件中最重要的和最常用的一个组件。

ADO 可通过任何OLE DB提供者访问和操作数据库中数据。

Page 44: 第 7 章  ASP 访问数据库

48

7.2 ADO访问数据库

ADO 模型的主体对象有 7 个,它们分别是 Connection 对象 Command 对象 RecordSet 对象 Field 对象、 Parameter 对象、 Property 对象和 Error 对象。

ADO 对象模型还包括 4 个集合 Field 集合、 Parameter 集合、 Property 集合和 Error 集合

48

Page 45: 第 7 章  ASP 访问数据库

49

7.2 ADO访问数据库 ADO 包括 Connection、 Command及

Recordset三个主要对象 Connection 对象—又称连接对象,主要用来建立与数据库的连接。

Command 对象—又称命令对象,是对数据库执行命令的对象,它可以执行对数据库查询、添加、删除、修改等记录操作。

Recordset 对象—又称记录集对象,用来得到从数据库返回的记录集 。

Error、 Parameter、 Field分别是它们的子对象

49

Page 46: 第 7 章  ASP 访问数据库

5050

7.2.1 Connection对象

Connection 对象的功能是连接数据。只有 Connection对象才能指定希望使用的 OLE DB提供者、连接到数据存储的安全细节以及其他任何连接到数据存储特有的细节。

除了为数据存储提供连接以外, Connection 对象允许针对数据存储执行命令操作。这些命令可以是结构化的或存储的命令(例如, SQL命令或一个存储过程),并且可以有选择地从数据存储中返回一些数据。

Connection 对象的创建方法如下: Set adocon= Createobject("adodb.connection")或Set adocon=Server.Createobject("adodb.connection")

Page 47: 第 7 章  ASP 访问数据库

51

建立 Connection 对象的方法一般如下:Set Connection 对象实例

=Server.CreateObject("ADODB.Connection")

Connection 对象实例 .Open 数据库连接字符串 在上面的数据库连接字符串中,会用到若干参数,如

DSN : ODBC 数据源名称 User :数据库登录用户名 Password :数据库登录密码 Driver :数据库的驱动程序类型 Dbq :数据库的物理路径 Provider : 数据提供者 Data Source :数据库的物理路径

51

Page 48: 第 7 章  ASP 访问数据库

52

连接数据库的具体方法 常用的数据库连接字符串的形式:( 1 )基于 ODBC 数据源的连接方式 : "Dsn=address2"( 2 )基于 ODBC 数据源的连接方式的省略方式 : "address2"( 3 )基于 ODBC但是没有数据源的连接方式

"Driver={Microsoft Access Driver (*.mdb)}; Dbq= d:\ASPLX\ch7\address.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= d:\ASPLX\ch7\

address.mdb ( 6 )基于 OLE DB 的连接方式(使用 Server.MapPath 转换路径)

"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.Mappath("address.mdb")

Page 49: 第 7 章  ASP 访问数据库

5353

Connection 对象连接数据库 利用 Connection 对象创建数据库连接的步骤如下:

( 1 ) 创建 Connection 对象实例,格式如下:Set conn=Server.CreateOreateObject("ADODB.Connection")

( 2 ) 指定连接字符串,不同的数据库系统,其连接字符串有所不同: 连接 Access 的连接字符串如下:

conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=accessdatabase“ 其中, accessdatabase 为数据库路径。

连接 SQLserver2000 的连接字符串如下:conn.Open "PROVIDER=SQLOLEDB;DATA SOURCE=SQL 服务器名称或 IP 地址 ;UID=sa;PWD= 数据

库密码 ;DATABASE= 数据库名称 "

(3) 打开数据库连接,格式如下:conn.Open connectionstring,UserID,Password

( 4 ) 关闭与数据源的连接,格式如下:conn.Close   

( 5 )释放 Connection 对象所占用的所有资源,格式如下:Set conn =nothing

【例 7-1】编写一段代码,要求连接指定文件夹下的 access 数据库” tbaddress.mdb” ,然后再关闭该数据库的连接。

Page 50: 第 7 章  ASP 访问数据库

54

Ch7\sL7-1.asp

Page 51: 第 7 章  ASP 访问数据库

55

Connection 对象的常用属性( 1) ConnectionTimeOut、 CommandTimeOut属性

用于设置 Connection对象的 Open方法和 Execute方法的最长执行时间。( 2) ConnectionString、 Provider、Mode属性

这几个属性通常用来设置数据库连接信息或连接权限等。 其中 ConnectionString 属性用于指定数据库连接字符串,如:

Provider属性用于指定OLE DB提供者 ,如:conn.Provider="Microsoft.Jet.OLEDB.4.0"

Mode属性用来设置连接数据库的权限,利用该属性就可以在打开数据库时限制数据库的连接方式,比如只读或只写 .

Page 52: 第 7 章  ASP 访问数据库

56

Connection 对象的方法 Open、 Close 方法

Open 方法用来建立与数据库的连接, Close 方法用来关闭一个已打开的Connection 对象及其相关的各种对象。

Execute 方法 方法用来执行数据库查询、添加、更新和删除记录的功能。

BeginTrans、 CommitTrans、 RollbackTrans 方法 其中 BeginTrans 方法用于开始一个事务处理; CommitTrans 方法用于提交事务处理结果,只有执行该方法后,才将结束事务处理通道并且真正更新数据库的内容; RollbackTrans 用于取消事务处理结果,执行该方法后,将结束事务处理通道并且取消当前事务处理中的任何更新动作。

Page 53: 第 7 章  ASP 访问数据库

5757

Execute 方法 Connection 对象的 execute 的语法规则为:

cnnname.execute strcommand,[lngrowsaffected[,lngoptions]]

其中, strcommand 的值可以是 sql 语句、表名、存储过程名,也可以是数据提供者所能接受的任意字符串。为了提高性能,最好为lngoptions参数指定合适的值(参数值及其含义图表 7-6 所示),以使提供者解释语句时不用再去判定其类型。

可选参数 lngrowsaffected将返回 insert、 update或 delete查询执行以后所影响的数目。这些查询会返回一个关闭的 recordset 对象。一个 select查询将返回 lngrowsaffected 值为 0 并且返回带有一行或多行内容的打开的 forward-only recordset 。参数值 描述

Adcmdunknown Command 类型未定 (默认值 ),由数据提供者去判别command 语法

Adcmdfile Command 是和对象类型相应的文件名称Adcmdstoredproc

Command 是存储过程名称

Adcmdtable Command 是能产生内部 select *from tablename 查询的表名称

Adcmdtabledirect

Command 是能直接从表中获取行内容的表名称

Adcmdtext Command 是一条 SQL 语句

Page 54: 第 7 章  ASP 访问数据库

5858

【例 7-2】编写一段代码,要求使用 Connection 对象的Execute 方法在 address.mdb 数据库中创建一个名为“员工基本情况表”。

Page 55: 第 7 章  ASP 访问数据库

59

Error 对象和 Errors 集合 Error 对象和 Errors 集合

Error 对象,它又称为错误对象,是 Connection 对象的子对象。数据库程序运行时,一个错误就是一个 Error 对象,所有的 Error 对象就组成了Errors 集合,又称错误集合。对象和集合的关系:汽车示例

Errors 集合的属性和方法:

Error 对象的常用属性:

Page 56: 第 7 章  ASP 访问数据库

60

Error 对象和 Errors 集合示例 Eg7-error.asp

Page 57: 第 7 章  ASP 访问数据库

61

7.2.2 Command对象

Command 对象 又称命令对象,它是介于 Connection 对象和

Recordset 对象之间的一个对象,它主要通过传递 SQL指令,对数据库提出查询、添加、删除、更新记录等操作请求,然后把得到的结果返回给 Recordset 对象。

Command 对象依赖 Connection 对象,因为Command 对象必须经过一个已经建立的 Connection对象才能发出 SQL 指令,只是实际开发时常常省略了Command 对象。

其实 ,当我们利用 Connection 对象执行一条命令时,就隐含地创建了一个 Command 对象

Page 58: 第 7 章  ASP 访问数据库

6262

7.2.2 Command对象

Command 对象的功能是执行参数化的存储过程。由前面 Connection 对象讨论可知, Connection 对象除了为数据存储提供连接以外,也允许针对数据存储执行命令操作。但是Connection 对象在处理命令的功能上受到一定的限制,而 Command 对象则是特别为处理命令的各方面问题而创建的。

另外,在 Connection 对象中不能指定参数的任何细节,而 Command 对象允许指定参数(以及输出参数和命令执行后的返回值)的精确细节(如数据类型等)。因此, Command 对象除了执行命令和得到一系列返回记录外,还可能会得到一些由命令提供的附加信息。

Page 59: 第 7 章  ASP 访问数据库

63

建立 Command 对象的方法 建立 Command 对象的方法( 1 )

首先建立 Connection 对象实例,然后再建立 Command 对象实例,如:

<% Dim conn Set conn=Server.CreateObject("ADODB.Connection")

conn.Open “Dsn=address2“ ‘通过设置数据源连接 Dim cmd

Set cmd=Server.CreateObject("ADODB.Command") cmd.ActiveConnection=conn %>

建立 Command 对象的方法( 2 ) 不建立 Connection 对象,直接建立 Command 对象,如下:

<% Dim cmd Set cmd= Server.CreateObject(“ADODB.Command”) cmd.ActiveConnection=”addr” %>

这种建立方法其实也要隐含建立 Connection 对象,但是,因为没有明确建立 Connection 对象,就不能使用 Connection 对象的 Execute等方法了。

Page 60: 第 7 章  ASP 访问数据库

6464

7.2.2 Command 对象

Command 对象的创建方法如下: Set adocon= Createobject("adodb. Command")或 Set adocon=Server.Createobject("adodb. Command" )

Page 61: 第 7 章  ASP 访问数据库

65

Command 对象的属性

Page 62: 第 7 章  ASP 访问数据库

66

Command 对象的常用属性

Command 对象的几个常用属性( 1 ) CommandText属性:该属性用于指定 Command对象要对数据库进行操作的指令,一般是 SQL 语句,不过也可以是数据表名、查询名或存储过程名。例如:

<% cmd.CommandText="Select * From tbAddress" cmd.CommandText="tbAddress

cmd.CommandText="qryList" %>

( 2 ) CommandType属性:用于告诉 Command 对象数据查询指令的类型,究竟是 SQL 语句、表名还是查询名或存储过程名?例如:

<% cmd.CommandType=1 ' 表示查询指令是 SQL 语句cmd.CommandText= "Select * From tbAddress"cmd.CommandType=2 ' 表示查询指令是数据表名 cmd.CommandText= "tbAddress"%>

Page 63: 第 7 章  ASP 访问数据库

67

Command 对象的方法 Command 对象的几个常用方法:( 1 ) Execute 方法

该方法用来执行数据库查询,包括查询记录、添加、删除、更新记录等各种操作,它的语法也有两种:

Set Recordset 对象实例 = Command 对象实例 .Execute 或 Command 对象实例 .Execute

在使用 Execute 方法之前,需要用 CommandText 指定数据库查询指令,告诉数据库要做什么操作。如:

<% cmd.CommandType=1 ' 表示查询指令是 SQL 语句 cmd.CommandText= "Select * From tbAddress" Set rs=cmd.Execute cmd.CommandType=1 ' 表示查询指令是 SQL 语句 cmd.CommandText= "Delete From tbAddress"

cmd.Execute %>

( 2 ) CreateParameter 方法:该方法用来创造一个新的Parameter 对象(参数对象),主要是在进行参数查询时使用,后面将专门讲述。

Page 64: 第 7 章  ASP 访问数据库

6868

Command 对象连接数据库 连接数据库除了可用 Connection 对象连接外,还可使用 Command 对象的Activeconnection属性来连接数据库。

【例 7-3】编写一段代码,要求用 Command 对象的Activeconnection属性连接指定文件夹下的 access 数据库” address.mdb” 。

Page 65: 第 7 章  ASP 访问数据库

6969

Command 执行命令 Command 对象执行命令的方法如下:( 1 )使用 Command 对象的 CommandText属性设置执行命令,该属性的设置语法规则如下:

Cmd.CommandText= StrCommand 其中, Cmd 维建立的 Command 对象的实例。

例如: Cmd.CommandText=” select * from UserInfo” 。( 2 )使用 Command 对象的方法 Execute执行 CommandText属

性中指定的 SQL 语句,其语法规则如下:Cmd.Execute 或 Cmd.Execute()

【例 7-4】编写一段代码,要求用 Command 对象的 Execute 方法查询接指定文件夹下的 access 数据库” address.mdb” 中” tbaddress” 表格里的数据。

Page 66: 第 7 章  ASP 访问数据库

7373

7.2.3 Recordset 对象 Recordset 对象

又称记录集对象。当用 Command 对象或 Connection 对象执行查询指令后,就会返回一个记录集对象,该记录集包含满足条件的所有记录,然后就可以利用 ASP 语句将记录集的数据显示在页面上。

Recordset 对象包含了 Fields 集合, Fields 集合中有记录集中每一个字段(列)的 Filed 对象。

要使用 Recordset 对象处理结果,首先必须创建 Recordset 对象实例。 Recordset 对象的创建方法格式:

Set Recordset 对象实例 = CreateObject("adodb.recordset") 或

Set Recordset 对象实例 =Server.CreateObject("adodb.recordset")

Page 67: 第 7 章  ASP 访问数据库

74

建立 Recordset对象

建立 Recordset 对象,语法如下。 Set Recordset 对象实例

=Server.CreateObject("ADODB.Recordset") Recordset 对象实例 .Open [Source],

[ActiveConnection], [CursorType], [LockType], [Options]

Page 68: 第 7 章  ASP 访问数据库

75

建立 Recordset 对象的方法 1

利用 Connection 对象的 Execute 方法建立<%

Dim connSet conn=Server.CreateObject("ADODB.Connection")conn.Open "Dsn=address2“ ‘设置了数据源Dim rsSet rs=conn.Execute("Select * From tbAddress")

%> 说明:

这种方法是最常用的方法。它没有明确建立 Command 对象,但是会建立一个隐含的Command 对象。

Page 69: 第 7 章  ASP 访问数据库

76

建立 Recordset 对象的方法 2

利用 Comand 对象的 Execute 方法建立 <%

Dim connSet conn=Server.CreateObject("ADODB.Connection")conn.Open “Dsn=address2” ‘设置了数据源Dim cmdSet cmd= Server.CreateObject("ADODB.Command")cmd.ActiveConnection=conncmd.CommandType=1cmd.CommandText="Select * From tbAddress"Dim rsSet rs=cmd.Execute

%> 说明:该方法明确建立了 Connection 对象和 Command 对象 。

Page 70: 第 7 章  ASP 访问数据库

77

建立 Recordset 对象的方法 3

利用 Connection 对象但明确建立Recordset 对象的方式 <%

Dim connSet conn=Server.CreateObject("ADODB.Connection")conn.Open “Dsn=address2“ ‘设置了数据源Dim rsSet rs=Server.CreateObject("ADODB.Recordset")rs.Open "Select * From tbAddress",conn,1,2,1

%> 说明:这是将方法一修改为明确建立 Recordset 对象。

Page 71: 第 7 章  ASP 访问数据库

78

建立 Recordset 对象的方法 4

利用 Command 对象但明确建立 Recordset 对象的方式 <%

Dim connSet conn=Server.CreateObject("ADODB.Connection")conn.Open "Dsn=address2"Dim cmdSet cmd= Server.CreateObject("ADODB.Command")cmd.ActiveConnection=conncmd.CommandType=1cmd.CommandText="Select * From tbAddress"Dim rsSet rs=Server.CreateObject("ADODB.Recordset")rs.Open cmd,,1,2

%> 说明:这种方法明确建立三个对象,功能最强大,也最科学。

Page 72: 第 7 章  ASP 访问数据库

79

建立 Recordset 对象的方法 5

直接建立 Recordset 对象<%

Dim rsSet rs=Server.CreateObject("ADODB.Recordset")rs.Open "Select * From tbAddress",

"Dsn=address2",1,2,1

%> 说明:这种方法由于没有明确建立 Connection对象和 Command 对象,就无法使用他们的特殊功能。

Page 73: 第 7 章  ASP 访问数据库

80

建立 Recordset 对象的总结一般只有在查询记录时才会需要建立

Recordset 对象。而插入、删除和修改记录时则不需要返回记录集,所以一般就利用Connection 对象或 Command 对象的Execute 方法就可以了。

关于记录集 记录集,好比内存中的虚拟数据表,保存了满足查找条件的所有记录。

记录集结构图

Page 74: 第 7 章  ASP 访问数据库

81

Recordset对象的属性和方法

Recordset 对象的常用属性如下图:

Page 75: 第 7 章  ASP 访问数据库

82

Recordset 对象的重要属性( 1 )

( 1 ) Source、 ActiveConnection、 CursorType、 LockType属性

这一组属性主要用于限定记录集的特性,和上一节建立Recordset 对象时的参数基本上是一致的。不过它们需要在打开记录集前设置,比如下面就用这几个属性改写上一节建立 Recordset 对象的方法( 3 )。

<%Dim rsSet rs=Server.CreateObject("ADODB.Recordset")rs.Source="Select * From tbAddress“rs.ActiveConnection=connrs.CursorType=1 ' 设置为键盘指针,可前后移rs.LockType=2 ' 设置可被一个客户修改rs.Open ' 打开记录集

%>

Page 76: 第 7 章  ASP 访问数据库

83

Recordset对象的重要属性( 2 )

( 2 ) MaxRecords 、 Filter 属性 这两个属性都是用来过滤记录集的。

其中 MaxRecords 属性用于设置从数据库取得的记录集的最大记录数目。例如下面的语句将限制最多返回 100 条记录:

<% rs.MaxRecords=100 %> Filter 属性可以利用条件表达式设置希望显示的记录。

例如下面语句将只返回 intAge 字段大于 18 并且小于 25 的记录:

<% rs.Filter="intAge>18 And intAge<25" %>

Page 77: 第 7 章  ASP 访问数据库

84

Recordset对象的重要属性( 3 、 4 )

( 3 ) RecordCount 属性 该属性用于返回记录集中的记录总数。例如下面语句将输

出记录总数:<% Response.Write rs.RecordCount %>

( 4 ) Bof 、 Eof 属性 这两个属性用于判断当前记录指针是否指向记录集的开头

或结尾,返回值为 True 或 False 。 当指针指向开头时, Bof 属性的值为 True , Eof 属性的值为

False ; 当指针指向结尾时, Bof 属性的值为 False , Eof 属性的值为

True 。 当指针指向某个记录时, Bof 属性、 Eof 属性值都为 False

Page 78: 第 7 章  ASP 访问数据库

85

Recordset 对象的重要属性( 5 ) PageSize、 PageCount、 AbsolutePage、 AbsolutePosi

tion属性 这一组属性用来完成分页显示数据的功能。其中 PageSize属性用于设置每一页的记录数。例如下面语句将设置每页显示 10条记录:

<% rs.PageSize =10 %> PageCount属性:用于返回数据页的总数 , 如下面语句将输出数据页总

数: <% Response.Write rs.PageCount %>

AbsolutePage属性:用于设置当前指针指向哪一页,如下面语句将指向第 2 页:

<% rs.AbsolutePage=2 %> AbsolutePosition属性:用于设置当前指针指向的记录行的绝对值,如

下面语句将指向第 10条记录: <% rs.AbsolutePosition=10 %>

利用这几个属性时一般也要求设置指针类型为 1 (键盘指针)

Page 79: 第 7 章  ASP 访问数据库

86

Recordset 对象的重要属性( 6 )

( 6 ) BookMark属性 该属性用于设置或返回书签位置,例如下面语句就可以将当前记录位置保存到一个变量中:

<% varA=rs.BookMark %> 当希望重新指向该记录时,只要将该变量赋值给

BookMark属性即可,记录指针就会自动指向书签所在记录。如:

<% rs.BookMark=varA %>

Page 80: 第 7 章  ASP 访问数据库

87

Recordset 对象的常用方法

Page 81: 第 7 章  ASP 访问数据库

88

Recordset对象的重要方法( 1 ) Open 、 Close 、 Requery 方法

这一组方法主要是关于 Recordset 对象本身的。 Open 方法用于打开一个记录集。

Rs.open [varsource[,varactiveconnection[,ingcursortype[, inglocktype [,ingoptions]]]]]

Varsource 是 SQL 语句或名称 Varactiveconnection 是创建的 connection 实例名 Ingcursortype 是指定 Recordset游标类型,默认 1 是单向只读 Inglocktype 是打开记录锁定方法,默认 1 只读,与上一个参数对应

Close 方法用于关闭记录集。例如:<% rs.Close %>

Requery 方法用于重新打开记录集,相当于先关闭再打开。例如:<% rs.Requery %>

Page 82: 第 7 章  ASP 访问数据库

89

Recordset 对象的重要方法( 2 )

MoveFirst、MovePrevious、MoveNext、MoveLast、Move 方法

MoveFirst 方法用于将记录指针移动到第 1 条记录。 MovePrevious 方法用于将记录指针向后(或向上)移动一条记录。

MoveNext 方法用于将记录指针向前(或向下)移动一条记录。

MoveLast 方法用于将指针移动到最后一条记录。 Move 方法用于将指针移动到指定的记录。语法为:

Recordset 对象 .Move number,start 其中 start 表示指针移动的开始位置,如省略默认为当前指针位置;

number 表示从 start 设置的起始位置向前或向后移动 number 条记录

Page 83: 第 7 章  ASP 访问数据库

90

Recordset 对象的重要方法( 3)

AddNew、 Delete、 Update、 CancelUpdate 方法 这一组方法用来添加、删除和更新记录。 添加记录时一般要同时用到 AddNew 方法和 Update 方法,例如:

<% rs.AddNew rs("strName")="李玫 " rs.Update%>

删除记录时比较简单,首先将指针移动到要删除的记录,然后利用Delete 方法就可以删除当前记录,不过还要用 Update 方法更新数据库。

更新记录时首先将指针移动到要更新记录,然后直接给字段赋值,之后使用 Update 方法更新数据库即可。

CancelUpdate 方法用来取消刚才添加、删除和更新记录的操作。

Page 84: 第 7 章  ASP 访问数据库

91

Recordset 对象的重要方法( 4 )

Find 方法 该方法用来查找符合条件的单个记录,语法如下:

Recordset 对象实例 .Find criteria, skiprecords, searchDirection, start

其中 criteria 是不含where 关键字的 sql where子句,可选参数 skiprecords 是应用 find 前所跳过的记录数目 searchdirection 指定查找方向 (adsearchforward, 和

adsearchbackward, 其中 adsearchforward 是默认值 ), 可选参数 start 指定了从哪儿开始查找,其值要么是一个 bookmark 值,要么

是 bookmark 常数。 下面来看两个常用的例子:

<% rs.Find "intAge<20" '向前查找年龄小于 20 的人员

rs.Find “intAge<20”,0,-1 ‘向后查找年龄小于 20 的人员

%>

Page 85: 第 7 章  ASP 访问数据库

92

Recordset 对象的重要方法( 5 ) GetRows 方法

该方法用来从记录集中当前记录开始返回多条记录,它将符合要求的数据返回给一个二维 variant 数组(行、列) 。

avarname=rstname.getrows(lngrows [,varstart[,{strfieldname|lngfieldindex|avarfieldnames|avarfieldindexes}]]

其中 lngrows 是返回记录行数, varstart 指定从哪儿开始查找,其值要么是一个 bookmark 值,要么是 bookmark

常数, bookmark 常数的取值如表 7-21 所示。 第三个参数可以是单个列(字段)的名称或索引,也可以是多个列名称或索引组成的

variant 数组。如果不指定第三个参数, getrows 返回 recordset 中所有列。 例如下面语句将从当前记录开始返回 10条记录

<% Dim varA varA=rs.GetRows(10) '返回 10条记录,之后 varA 是数组

%>

Page 86: 第 7 章  ASP 访问数据库

9393

Recordset 对象的重要方法( 6 )

Getstring 方法 Getstring 方法的功能是在默认情况下,返回指定数目记录的 string串值,记录间由返回代码分隔。记录内由 tab分隔。其语法规则为:

strclip=rstname.getstring(lngrows,[, strcloumndelimiter[,strrowdelimiter,[strnullexpr]]])

Resync 方法 Resync 方法的功能是重新从表中获取部分

recordset 内容。其语法规则为: rstname.resync [lngaffectrecords]

其中 lngaffectrecords 的取值见表 7-20 所示。如果把该参数设为 adaffectcurrent 或 adaffectgroup ,则比 adaffectall(默认值 )所耗的资源要少。

Page 87: 第 7 章  ASP 访问数据库

9494

Recordset 对象的重要方法( 7 )

Save 方法 Save 方法的功能是创建包含 recordset永久性拷贝的文件。其语法规则为:

rstname.save strfilename 其中 strfilename 为路径和文件名。通常用 .rst 作为文件的扩展名。

Supports 方法 Supports 方法如果数据提供者支持指定的游标相关的方法,则返回 true ,否则返回为 false 。其语法规则为:

supported=rstname.supports (lngcursoroptions).

Page 88: 第 7 章  ASP 访问数据库

9595

【例 7-5】编写一段代码,要求连接数据库指定文件夹下的access 数据库” student.mdb”,并创建记录集,最后使用 do while循环语句将 xinxi 表中各条记录显示出来。

Page 89: 第 7 章  ASP 访问数据库

96

利用 Recordset 对象存取数据库

利用 Recordset 对象也可以执行查询、添加、删除和更新记录的操作,其中查询记录和之前学的基本一样,而添加、删除和更新记录就要用到 AddNew、 Delete和Update 方法。

下面请看示例:

Page 90: 第 7 章  ASP 访问数据库

97

(1)Recordset 对象存取数据库示例

Eg7-4rec.asp

Page 91: 第 7 章  ASP 访问数据库

98

(2)添加不完整的记录 下面就讲解利用 Recordset对象的 AddNew方法来添加不完整记录的方法。

Eg7-5rec.asp

Page 92: 第 7 章  ASP 访问数据库

99

(3)分页显示数据 分页显示示意图:

分页显示数据的思想是:首先显示第 1 页数据,并且在下方提供页码链接,当客户选择页码时,仍然传递到本文件,并显示新的一页。

Page 93: 第 7 章  ASP 访问数据库

100

分页显示数据示例Eg7-6recfy.asp

Page 94: 第 7 章  ASP 访问数据库

101

补充: Field 对象和 Fields 集合 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

Page 95: 第 7 章  ASP 访问数据库

102

Fields集合的属性和方法

( 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)

Page 96: 第 7 章  ASP 访问数据库

103

Field 对象的属性和方法

Field 对象常用属性和方法如下:

Page 97: 第 7 章  ASP 访问数据库

104

Field 对象的常用属性示例 Eg7-7field.asp

Page 98: 第 7 章  ASP 访问数据库

105

Fields集合与 Field对象的反思 由于 Field 对象实在太重要了,因此 ASP把它作为默认的了, Fields 、 Item 、 Value 都可以省略不写。比如,在上面的例子中,其实不需要建立 Field 对象,直接用如下语句即可输出属性值:<%

Response.Write rs("name").nameResponse.Write rs("name") 'Value 属性可省略

Response.Write rs("name").typeResponse.Write rs("name"). Definedsize

%>

Page 99: 第 7 章  ASP 访问数据库

106106

7.3 数据库连接

使用 ADO 对象建立对数据库的连接有如下两种方法

即用原始的 OLE DB驱动程序建立连接 使用面向 ODBC驱动器的 OLE DB驱动程序建立连接,这种连接与任何有 ODBC驱动器的数据库兼容。

Page 100: 第 7 章  ASP 访问数据库

107107

7.3.1 OLE DB连接数据库

OLE DB 定义了一组 COM 接口,以便为应用程序提供对存储在不同信息源中的数据的统一访问。

OLE DB允许数据源通过支持适用于数据源的众多 DBMS功能的接口共享数据。

OLE DB 的高性能体系结构得益于它使用了灵活的、基于组件的服务模型。 OLE DB只需要完成特定任务所需的组件,而不预先规定应用程序和数据之间的中间层数。

使用 OLE DB驱动程序连接数据库的方法非常简单。 例如:下面的语句给出了使用 OLE DB 方式连接 Access 数据

库” D:\studend.db” 的字符串:Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" &

Server.MapPath("student.mdb")

Page 101: 第 7 章  ASP 访问数据库

108108

7.3.2 ODBC连接数据库

通过 ODBC(Open Database Connectivity ),用户可以选择希望创建的DSN (数据源名, Data Source Name )类型是用户、系统或文件,其中用户和系统DSN 存储在 Windows NT注册表中。【例 7-6】利用 DSN 方式连接指定文件夹下的 access 数据库” address.mdb” ,并创建记录集,最后使用 do while循环语句将各条记录显示出来。

Page 102: 第 7 章  ASP 访问数据库

109109

DSN-less 连接数据库 DSN-less 连接数据需要用到 ODBC 连接字符串,几种常用的 ODBC 连接字符串如表 7-23 所示。【例 7-7】编写一段代码,要求连接数据库指定文件夹下的

access 数据库” address.mdb” ,并创建记录集,最后使用 do while循环语句将各条记录显示出来。 sL7-7.asp

Page 103: 第 7 章  ASP 访问数据库

110

sL7-7.asp显示数据记录代码

Page 104: 第 7 章  ASP 访问数据库

111111

7.4 数据库操作

SQL 是一种结构化查询语言,也是一种 ANSI 的标准计算机语言。利用 SQL 访问数据库。连接好数据库后,就可以利用 SQL 语句对数据库进行各种操作了。

如: SQL 可从数据库取回数据; SQL 可在数据库中插入新的记录; SQL 可更新数据库中的数据;SQL 可从数据库删除记录; SQL 可创建新数据库; SQL 可在数据库中创建新表; SQL 可在数据库中创建存储过程; SQL 可在数据库中创建视图; SQL 可以设置表、存储过程和视图的权限等等。

Page 105: 第 7 章  ASP 访问数据库

112112

7.4.1 表格的操作

表格的操作是指利用 SQL 语句对指定数据库中的表格进行增、删、改等操作。

创建表格创建数据库中的表格的 SQL 语句为 CREATE TABLE ,其语法规则如下:

CREATE TABLE 表名称 (列名称 1 数据类型 ,列名称 2 数据类型 ,列名称 3 数据类型 ,....)

【例 7-8】编写一段代码,要求利用 SQL 语句在指定数据库” student.mdb” 中创建一个“ teacher” 表格,表格字段及其数据类型自己定义。

Page 106: 第 7 章  ASP 访问数据库

113113

删除表格 删除数据库中的表格的 SQL 语句为 DROP TABLE ,其语法规则如下:

DROP TABLE 表名称【例 7-9】编写一段代码,要求利用 SQL 语句在指定数据库” student.mdb” 中删除刚才创建的“ teacher” 表格。

Page 107: 第 7 章  ASP 访问数据库

114114

修改表格 修改数据库中的表格的 SQL 语句为 ALTER TABLE ,其语法规则如下: ( 1 )如需在表中添加列,语法规则为:

ALTER TABLE table_name ADD column_name datatype( 2 )如需删除表中的列,语法规则为:

ALTER TABLE table_name DROP COLUMN column_name注释:某些数据库系统不允许这种在数据库表中删除列的方式 (DROP

COLUMN column_name) 。( 3 )如需改变表中列的数据类型,语法规则为:

ALTER TABLE table_name ALTER COLUMN column_name datatype

【例 7-10】编写一段代码,要求利用 SQL 语句在指定数据库” student.mdb” 中将【例 7-8】中创建的“ teacher” 表格增加 1 个字段,字段名和数据类型自定义。

Page 108: 第 7 章  ASP 访问数据库

115115

7.4.2 记录的操作 表格记录的操作是指利用 SQL 语句对指定数据库中的指定表格中的记录数据进行增、删、改等操作。

1 、插入记录 向表格中插入新记录的表格的 SQL 语句为 INSERT INTO ,其语法规则如下:

INSERT INTO 表名称 VALUES (值 1, 值 2,....) 另外,也可以指定所要插入数据的列,此时语法规则如下:

INSERT INTO table_name (列 1, 列 2,...) VALUES (值 1, 值 2,....)【例 7-11】编写一段代码,要求利用 SQL 语句向指定数据库”

student.mdb” 中中的“ teacher” 表格插入一条新记录,记录自己定义。

Page 109: 第 7 章  ASP 访问数据库

116116

2 、删除记录

删除表格中记录的 SQL 语句为 DELETE FROM ,其语法规则如下: DELETE FROM 表名称 WHERE 列名称 = 值

【例 7-12】编写一段代码,要求利用 SQL 语句将指定数据库” student.mdb” 中的“ teacher” 表格中满足条件的记录删除掉。

Page 110: 第 7 章  ASP 访问数据库

117

例:数据库 a1.mdb 中表 S的结构和数据如下。请填充删除姓名是小红的记录的程序。

<%@ language=vbscript %><% set cn1= 。 .Open "DRIVER={Microsoft Access Driver

(*.mdb)};DBQ="& Server.MapPath("a1.mdb") sql="delete from s where " cn1. 。 cn1.close set cn1=nothing %>

server.createobject("ADODB.connection")

cn1

姓名 =‘ 小红’

execute(sql)

Page 111: 第 7 章  ASP 访问数据库

118118

3 、更新记录更新表格中记录的 SQL 语句为 UPDATE ,其语法规则如下: UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值【例 7-13】编写一段代码,要求利用 SQL语句将指定数据库” student.mdb”中的“ teacher” 表格中姓名为“张三”的记录更新为“李四”。

Page 112: 第 7 章  ASP 访问数据库

119

例 :connection 连接,排序显示数据一般,我们会用 Order By 来实现对查询到的记录按某个字段排序的功能,但是许多网站有这样的效果,单击表格中某一列的标题就可以按相应的字段排序了,那么这一功能又是怎么实现的?

下面举例来说明: 本示例的中心思想是给列标题添加超链接;单击该超链接就重新打开本页面,不过会将排序字段名称附加在查询字符串中传递过来;然后在Select 语句中就可以按该字段排序了。

Page 113: 第 7 章  ASP 访问数据库

120

按各字段排序显示的示例Eg7-1.asp

Page 114: 第 7 章  ASP 访问数据库

下面的程序所完成的任务是连接数据库,并读取其中 books 表中的所有记录并输出到客户端。(把 books表中所有记录以表格的形式显示到单个页面中,每条记录为一个表格行)。请填充划线部分的代码。 < % dim conn set conn = server.createobject(“ADODB.Connection “)conn.open “Provider = SQLOLEDB.1 ; UID = stu; Password = dgxystu; “& “ Initial Catalog = stu; Data Source = localhost “Set rst = Server.CreateObject(“ADODB.Recordset”)rst.CursorLocation = 2rst.CursorType = 3

strSQL = “SELECT * FROM books “ rst.Open .

I=0responsewrite “< table border cellspaceing=1 cellpadding=7 >”do while not rst . response.write “<tr> <td> “ & i+1 & “<td>” & rst (“ bookname”) & “</td><td>”& rst(“authorname” ) & “ </td><td>” & rst( “ unitprice “ ) & “</td>” . i=i+1loopresponse.write “ “rst. .

‘释放占用资源 % >

strSQL.conn

.EOF

rst .movenext

</table> Close

set rst=nothing

2 、查询显示 S 表中“姓名”、 “年龄”字段值。数据源为: DB <html><body> <% set rs= . rs.open “ ; “ %> 姓名为: <% =rs(“姓名” ) %> 年龄为: <% =rs(“年龄” ) %> <% rs.close ‘释放 rs变量 %> </body></html>

Server.Createobject(“ADODB.Recordset”)

select * form s, DSN=DB

set rst=nothing

Page 115: 第 7 章  ASP 访问数据库

122

课外练习

完成网上作业实验 7