《ASP动态网页制作基础教程》第6章 ASP与数据库_第1页
《ASP动态网页制作基础教程》第6章 ASP与数据库_第2页
《ASP动态网页制作基础教程》第6章 ASP与数据库_第3页
《ASP动态网页制作基础教程》第6章 ASP与数据库_第4页
《ASP动态网页制作基础教程》第6章 ASP与数据库_第5页
已阅读5页,还剩401页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第6章

ASP与数据库6.1数据库系统基础知识6.2Access数据库的基本操作6.3Connection对象6.4Recordset对象6.5留言板系统6.6常见ASP数据库的安全与防范本章小结

在互联网上我们能经常见到网站提供的论坛、留言本、聊天室、网上投票、网上调查等栏目,这些栏目的程序都是通过与数据库技术的结合而实现的。ASP与数据库技术的结合是ASP动态网页设计的精华部分。换句话说,如果ASP没有与数据库技术结合起来,那么我们学习ASP就没有什么实际意义了。这一章我们将首先介绍最基本的数据库知识,然后介绍Access数据库的基本操作,再介绍在ASP中如何使用ADO操作数据库,最后以一个完整的留言板系统的制作实例来综合运用所学的知识。

本节我们将介绍数据库系统概述及与数据库相关的ODBC、OLEDB、SQL、ADO等基本概念。6.1数据库系统基础知识6.1.1数据库系统概述

数据库也就是存储数据的仓库,数据库系统是指计算机应用系统中的一种专门用于管理数据资源的系统,它由应用程序、数据库管理系统(DataBaseManagementSystem,DBMS)和数据库3部分组成。数据库系统的发展先后经历了人工管理阶段、文件管理阶段和数据库管理阶段。根据数据库的发展可将数据库划分为3种模型:层次模型、网络模型和关系模型。当前比较流行的是关系型数据库,如微软公司的SQLServer数据库、甲骨文公司的Oracle数据库和IBM公司的DB2数据库等都属于关系型数据库。在关系型数据库中,所有的数据都是按表存放的。和我们日常生活中见到的普通表格一样,这里的每个表也都是由行和列组成。我们称表的每一列为一个字段,每一行为一条记录,如图6-1所示。在关系型数据库中多个表之间可以建立某种关系,从而我们可以从多个表中提取所需要的信息。图6-1字段6.1.2与数据库相关的基本概念

下面我们介绍几个与数据库有关的基本概念,这是我们以后学习ASP操作数据库必须要知道的。

1. ODBC

ODBC(Open

DataBaseConnectivity)是Microsoft公司制定的一套称之为开放式数据库连接的标准,它提供了一组对数据库访问的应用程序接口,它可以访问任意可以使用ODBC驱动程序的数据源。在ASP中我们可以认为它是一个中间物件,位于ASP与数据库系统之间,能让ASP连接到数据库,如图6-2所示。图6-2现在流行的数据库有多种,如SQLServer、Oracle、DB2等,各种数据库的操作方法都不一样,因此要学会使用某种数据库就必须要学会它的操作方法,在编程中如果要换一种数据库的话就要重新学习这种数据库的操作方法,还要更改编写好的程序,这样就比较麻烦。而ODBC规范在很大程度上减少了这种麻烦,我们在编写程序的时候如果要改变数据库,只要通知ODBC就可以了。

2. OLEDB

OLEDB(ObjectLinking&EmbeddingDataBase)是Microsoft公司开发的一种高性能的、基于组件对象模型(COM)的数据库技术,它建立于ODBC之上,可以访问任意可以使用OLEDB驱动程序的数据源。OLE

DB不仅可以连接各种关系型数据库,还可以连接Exchange、活动目录,甚至操作系统文件目录等各种数据源。

3. SQL

SQL是结构化查询语言(StructuredQueryLanguage)的简称,它是一种专门用来与数据库通信的语言。SQL是由IBM公司发展起来的,后来被许多数据库软件公司接受而成为了业内的一个标准,1987年得到国际标准化组织的支持而成为了国际标准。我们使用SQL语言与数据库沟通,数据库才能按照我们的命令完成相关的操作,比如查询数据、删除数据、修改数据等操作。这里要注意的是许多数据库供应公司为了突出产品的特色,通过增加语句或指令,对SQL进行了扩展,所以有些数据库可能不支持所有的标准SQL语句。我们在今后的编程中要注意数据库的兼容性,要尽量使用所有数据库都支持的SQL语句来操作数据库。

4. ADO

ADO是ActiveXDataObject(ActiveX数据对象)的简称,它是Microsoft公司为数据库应用程序开发的一种面向对象的、与语言无关的应用程序接口。它是一组优化的访问数据库的专用对象集。在ASP中,ADO可以看做是一个数据库访问组件,ADO包括一般在ASP中使用的所有对象。ADO包含的对象及作用见表6-1。

表6-1ADO包含的对象及作用

在ASP中我们使用ADO对象来访问数据库,它使我们对数据库的访问快捷、简单而高效。ADO并不与数据库直接通信,一般情况下,我们使用它通过ODBC驱动程序来连接数据库,如图6-3所示。

图6-3

(1)关系型数据库中,数据是按照表的形式存储的,我们把表的每一列称为一个________,每一行称为一条______。

(2)________是Microsoft公司制定的一套称之为开放式数据库连接的标准,它提供了一组对数据库访问的应用程序接口,它位于ASP与数据库系统之间,能让ASP连接到数据库。

作业

(3)________是一种专门用来与数据库通信的语言,通过它我们可以让数据库执行查询数据、删除数据、修改数据等操作。

(4)________是一组优化的访问数据库的专用对象集。在ASP中我们使用它来访问数据库,它通过ODBC与数据库进行通信。

本节我们将介绍Access数据库的创建,常用SQL语句以及使用SQL语句对Access数据库执行查询、增加、删除和修改数据的操作。6.2Access数据库的基本操作

6.2.1Access数据库的创建

MicrosoftAccess数据库是MicrosoftOffice软件家族中的一员。它是一种关系型数据库系统,应用于中小型的网站系统和一般性的数据存储,比如数据量不大的网站、论坛、留言本等。虽然在性能上它没有SQLServer、MySQL优秀,但它也具备了所有数据库的特点,基本上能够满足我们的需要。

1.创建Access数据库

创建一个Access数据库的操作步骤如下:

(1)单击“开始”→“程序”→“MicrosoftOffice”→“Microsoft

Accesss2003”命令,即可打开Access2003,如图6-4所示。

图6-4

(2)单击“文件”→“新建”命令,在窗口右边点击“空数据库”,然后在弹出的对话框中选择保存文件的路径和文件名,再单击“创建”,如图6-5所示,这样一个空的数据库就创建好了,出现如图6-6所示的画面。

图6-5

图6-6

(3)创建数据库表。在Access中创建表的方法有三种:使用设计器创建表、使用向导创建表、通过输入数据创建表,其中第一种方法是最常用的。

下面我们将表6-2中的数据存入到数据库表中。

表6-2学生信息表显然数据库表的字段名称是表6-2的列标题,表6-2共有5列,所以我们要创建5个字段。双击“使用设计器创建表”,打开如图6-7所示的窗口。

(4)在“字段名称”下面输入第1个字段的名称“学号”,数据类型为“文本”,在“说明”里可以填写对这个字段的一些说明文字,如图6-8所示。

图6-7

图6-8

(5)依次输入其它字段,如图6-9所示。

(6)完成后单击这个窗口右上角的关闭按钮,弹出如图6-10所示的对话框。

(7)单击“是(Y)”,然后在“另存为”对话框中输入表的名称为“学生信息表”,如图6-11所示。

(8)单击“确定”,然后在弹出的“尚未定义主键”提示框中单击“否(N)”,如图6-12所示。

至此,一个数据库表的结构就创建完成了。

图6-9

图6-10

图6-11

图6-12

(9)双击打开刚创建的“学生信息表”,输入在表6-2中提供的数据,如图6-13所示。

(10)关闭表窗口存储输入的数据。

这样就完成了一个数据库表数据的添加。

图6-13

2.对Access数据库表的进一步研究

右单击刚创建的表,在弹出的如图6-14所示的菜单中单击“设计视图”,打开这个表的设计视图,如图6-15所示。

图6-15所示的窗口分为两部分,上半部分是字段列表,下半部分是各字段对应的属性。单击任意字段就会在下半部分显示其对应的属性。每一个字段都必须设置它的数据类型,数据类型不同,对应的属性也有所差异。下面介绍数据表的一些主要属性:

图6-14

图6-15

(1)字段大小。它限定了这个字段里最多能容纳的内容的大小。如果字段数据类型为“数字”,这里会显示一个下拉列表,可选择合适的数据类型;如果字段数据类型为“文本”,那么可以在这里输入一个数字,来表示这个字段最多能容纳多少个字符。

(2)必填字段,有“是”或“否”两个选择。如果选择“是”,则表示这个字段是必须要填写的,不能空着。

(3)索引,有三个值可以选择。如果选择“有(无重复)”,则表示这个字段的内容是不能重复出现的,比如我们已经添加了一条学号为“060105”的记录,如果再添加学号为“060105”的记录就会显示出错。如果选择“有(有重复)”,则表示这个字段允许出现多条一样的记录。索引可以加快字段搜索及排序的速度,但也会使数据更新的速度变慢。在日常应用中,我们对表的查询操作要比更新操作多得多,所以我们经常要在关键字段上建立索引,从而提高数据库的性能。在“学号”字段上单击右键,在弹出的菜单中选择“主键”,就可以把这个字段设置为主键了。主键是数据表里每一条记录的唯一标识,其值不能有重复。因此,该字段一旦被设置为“主键”,则其“索引”属性将自动设置为“有(无重复)”。主键可方便我们对数据进行查询和定位,它会对数据库的操作带来许多好处。我们还可以把多个字段设置为联合主键,操作步骤是:按住Ctrl键,然后单击多个字段左边的灰色方块选择多个字段,最后在选择的黑色区域内单击右键,选择“主键”。如果设置了多个字段的联合主键,只要它们的组合值不重复就可以。也就是说,可以允许其中每个主键的值有重复,但所有联合主键的值是不能重复出现的。

(4)格式。如果字段是“数字”类型,那么这里会显示7种数字格式供选择;如果字段是“日期”类型,那么这里会显示7种日期格式供选择。

(5)默认值。在插入一条新记录时,可以让系统向这个字段插入默认的值。可以手工输入一个值,也可以通过单击“…”打开“表达式生成器”窗口设置更为复杂的默认值,如图6-16所示。

图6-16例如:我们要默认插入当前系统时间,操作步骤如下:首先确保要添加默认值字段的数据类型为“日期/时间”型,然后在打开的“表达式生成器”窗口中依次双击“函数”,单击“内置函数”,单击“日期/时间”,再双击“Now”,如图6-17所示。

最后单击“确定”。这样我们在插入一条新记录时,系统就自动为这个字段添上当前的日期和时间。

如果要在表中插入一个新字段,比如我们要在“学号”字段前插入新的字段“序号”,可以这样做:单击“学号”字段左边的灰色按钮选中整行,然后右击,在弹出的菜单中选择“插入行”,如图6-18所示。

图6-17在插入的新行中输入“序号”字段,数据类型为“自动编号”,如图6-19所示。

然后关闭“设计视图”,系统提示是否保存修改,选择“是(Y)”。打开“学生信息表”,在“学号”前添加了“序号”字段,因为这个字段的数据类型是“自动编号”,所以系统会自动为该字段添加从1开始的值,如图6-20所示。

“自动编号”字段的值是不存在重复的,在以后的编程中我们会经常用到。

图6-18

图6-19

图6-20

3.设计数据库表的注意事项

设计数据库表时应注意以下事项:

(1)表名和字段名最好用有意义的英文或汉语拼音,这样既可以使数据库有很好的兼容性,又方便我们以后的操作。

(2)在给字段命名时最好加上前缀,这样在多表操作时可以避免与别的表中的字段重复,同时也可以使我们方便地看出该字段的作用。

4.对“学生信息表”进行改进

(1)右键单击“学生信息”表,在弹出的菜单中选择“重命名”,将这个表重命名为“student_info”,如图6-21所示。

(2)右键单击“student_info”表,在弹出的菜单中选择“设计视图”,将所有字段改为图6-22所示的内容。

(3)关闭表设计视图,在提示对话框中选择“是(Y)”,保存对表的设计更改。

图6-21

图6-226.2.2常用SQL语句

SQL语言是我们与数据库进行沟通的语言。SQL的语句是相当复杂的,要完全学习透彻的话需要一个漫长的过程。下面我们就来学习使用频率较高的SQL语句的使用,这足以满足解决我们在后面的编程中所遇到的问题。

首先我们要做一些准备。打开Access,新建一个数据库“db2.mdb”,数据库里包含两张表:User表——存储用户的登录信息,其结构见表6-3;UserInfo表——存储用户的基本信息,其结构见表6-4。

表6-3User表的结构表6-4UserInfo表的结构按图6-23、图6-24所示内容输入一些基本信息。

我们对数据库常进行的是数据查询、增加、删除和修改等操作。下面我们介绍常用的SQL语句。

图6-23

图6-24

1. 查询语句

在数据库中我们使用SELECT语句对数据库执行查询操作。该语句语法结构十分复杂,其常用的语法结构是:

SELECT[TOP返回记录条数]字段名列表FROM数据库表名列表[WHERE条件表达式][ORDERBY排序字段名列表[ASC/DESC]]

说明:这里[]表示其包含的语句是可选的。

下面我们通过案例来说明这条语句的应用。

案例6-1:查询UserInfo表,返回表中所有的记录。

语句:SELECT*FROMUserInfo

说明:这里的*表示所有字段的意思。整句的意思是“从UserInfo表中选择所有的字段”。

【操作步骤】

(1)打开数据库“db2.mdb”,如图6-25所示。

(2)单击窗口中的“查询”,然后单击“在设计视图中创建查询”,如图6-26所示。

(3)在弹出的对话框中选择UserInfo,然后单击“关闭”,如图6-27所示。

图6-25

图6-26

图6-27

(4)在“查询1:选择查询”窗口(如图6-28所示)中单击右键,在弹出的菜单中选择“SQL视图”,如图6-29所示。

(5)在弹出的窗口中输入SELECT*FROMUserInfo,如图6-30所示。

(6)单击Access常用工具栏上的“!”按钮,执行这条查询语句。系统返回UserInfo表中所有的记录,如图6-31所示。

图6-28

图6-29

图6-30

图6-31

案例6-2:查询UserInfo表中所有记录,返回用户的真实姓名和年龄字段。

语句:SELECTi_name,i_ageFROMUserInfo

说明:整句的意思是“从UserInfo表中选择i_name字段和i_age字段的值”。字段之间用英文输入法状态下的逗号隔开。

【操作步骤】

(1)打开数据库“db2.mdb”。

(2)单击窗口中的“查询”,然后单击“在设计视图中创建查询”。

(3)在弹出的对话框中选择UserInfo,然后单击“关闭”。

(4)在“查询1:选择查询”窗口中单击右键,在弹出的菜单中选择“SQL视图”。

(5)在弹出的窗口中输入:SELECTi_name,i_ageFROMUserInfo。

(6)单击Access常用工具栏上的“!”按钮,执行这条查询语句。系统返回UserInfo表中所有记录的i_name和i_age字段内容,如图6-32所示。

图6-32

案例6-3:查询UserInfo表中是会员的所有记录。

语句:SELECT*FROMUserInfoWHEREi_vip=true

说明:WHERE子句后面通常跟上一个查询条件。本句的意思是“从UserInfo表中选择所有字段,当i_vip字段值为true的时候”。

【操作步骤】

(1)打开数据库“db2.mdb”。

(2)单击窗口中的“查询”,然后单击“在设计视图中创建查询”。

(3)在弹出的对话框中选择UserInfo,然后单击“关闭”。

(4)在。“查询1:选择查询”窗口中单击右键,在弹出的菜单中选择“SQL视图”。

(5)在弹出的窗口中输入:SELECT*FROMUserInfoWHEREi_vip=true。

(6)单击Access常用工具栏上的“!”按钮,执行这条查询语句。系统返回UserInfo表中i_vip字段值为true的所有记录,如图6-33所示。

图6-33

案例6-4:查询UserInfo表中是会员并且年龄在26岁以下的所有记录。

语句:SELECT*FROMUserInfoWHEREi_vip=trueANDi_age<26

说明:WHERE子句后面通常跟上一个查询条件。本句的意思是“从UserInfo表中选择所有字段,当i_vip字段值为true并且i_age字段值大于25的时候”。

【操作步骤】

(1)打开数据库“db2.mdb”。

(2)单击窗口中的“查询”,然后单击“在设计视图中创建查询”。

(3)在弹出的对话框中选择UserInfo,然后单击“关闭”。

(4)在“查询1:选择查询”窗口中单击右键,在弹出的菜单中选择“SQL视图”。

(5)在弹出的窗口中输入:SELECT*FROMUserInfoWHEREi_vip=trueANDi_age<25。

(6)单击Access常用工具栏上的“!”按钮,执行这条查询语句。系统返回UserInfo表中i_vip字段值为true并且i_age小于25的所有记录,如图6-34所示。

图6-34

案例6-5:查询UserInfo表中用户名姓张的所有记录。

语句:SELECT*FROMUserInfoWHEREi_nameLIKE'张*'

说明:这里使用模糊查询关键字“LIKE”,它表示“像”的意思,它后面的字符用英语状态下的单引号围起来,单引号里用到了通配符“*”,通配符就是指可以匹配其它字符的符号,*代表多个任意字符。模糊查询还有一个通配符“?”,它代表一个任意字符。这条语句的意思是“从UserInfo表中选择所有记录,当i_name字段中的第一个字符是‘张’的时候”。

【操作步骤】

(1)打开数据库“db2.mdb”。

(2)单击窗口中的“查询”,然后单击“在设计视图中创建查询”。

(3)在弹出的对话框中选择UserInfo,然后单击“关闭”。

(4)在“查询1:选择查询”窗口中单击右键,在弹出的菜单中选择“SQL视图”。

(5)在弹出的窗口中输入SELECT*FROMUserInfoWHEREi_nameLIKE"张*"。

(6)单击Access常用工具栏上的“!”按钮,执行这条查询语句。系统返回UserInfo表中用户名姓张的所有记录,如图6-35所示。

如果要查询i_name字段中第二个字符为“小”的所有记录,该语句可以改为

SELECT*FROMUserInfoWHEREi_nameLIKE"?小*"

图6-35

案例6-6:查询UserInfo表中前3条记录。

语句:SELECTTOP2*FROMUserInfo

说明:这里使用了TOP关键字,它后面跟上一个数字表示要返回记录的条数。这条语句的意思是“从UserInfo表中选择所有记录中的头2条”。

【操作步骤】

(1)打开数据库“db2.mdb”。

(2)单击窗口中的“查询”,然后单击“在设计视图中创建查询”。

(3)在弹出的对话框中选择UserInfo,然后单击“关闭”。

(4)在“查询1:选择查询”窗口中单击右键,在弹出的菜单中选择“SQL视图”。

(5)在弹出的窗口中输入:SELECTTOP2*FROMUserInfo。

(6)单击Access常用工具栏上的“!”按钮,执行这条查询语句。系统返回UserInfo表中头2条记录,如图6-36所示。

图6-36

案例6-7:将UserInfo表中所有记录按年龄字段升序排列。

语句:SELECT*FROMUserInfoORDERBYi_ageASC

说明:这里使用了ORDERBY关键字,它后面跟的是要排序的字段列表。ASC表示“升序”排列,DESC表示降序排列。如果省略ASC或DESC,则默认为“升序”。这条语句的意思是“从UserInfo表中选择所有记录,并将记录按字段i_age升序排列”。

【操作步骤】

(1)打开数据库“db2.mdb”。

(2)单击窗口中的“查询”,然后单击“在设计视图中创建查询”。

(3)在弹出的对话框中选择UserInfo,然后单击“关闭”。

(4)在“查询1:选择查询”窗口中单击右键,在弹出的菜单中选择“SQL视图”。

(5)在弹出的窗口中输入:SELECT*FROMUserInfoORDERBYi_ageASC。

(6)单击Access常用工具栏上的“!”按钮,执行这条查询语句。系统返回UserInfo表中所有记录并按年龄字段升序排列,如图6-37所示。

案例6-8:查询User表和UserInfo表中所有记录。已知User表中的u_id字段和UserInfo表中的i_uid字段是一一对应关系。

语句:SELECT*FROMUser,UserInfoWHEREUser.u_id=UserInfo.i_uid

说明:这里对两个表进行查询操作,注意表示字段用“表名.字段名”的格式,如果两个表中没有相同的字段可以省略表名。这条语句的意思是“从User表和UserInfo表中选择所有记录”。

图6-37

【操作步骤】

(1)打开数据库“db2.mdb”。

(2)单击窗口中的“查询”,然后单击“在设计视图中创建查询”。

(3)在弹出的对话框中选择UserInfo,然后单击“关闭”。

(4)在“查询1:选择查询”窗口中单击右键,在弹出的菜单中选择“SQL视图”。

(5)在弹出的窗口中输入:

SELECT*FROMUser,UserInfoWHEREUser.u_id=User

Info.i_uid

(6)单击Access常用工具栏上的“!”按钮,执行这条查询语句。系统返回User表和UserInfo表中的所有记录,如图6-38所示。

图6-38

2.向表中增加记录的语句

向表中增加记录语句的常用的语法结构为

INSERTINTO表名[(字段1[,字段2[,…[字段N]]])]VALUES(字段值1[,字段值2[,…[字段值N]]])

说明:INSERTINTO是关键字,说明这条语句是插入语句;“表名”是要插入数据的表的名字,[(字段1[,字段2[,…[字段N]]])]是要插入的字段列表;VALUES是插入值关键字,(字段值1[,字段值2[,…[字段值N]]])是要插入的字段值列表。

案例6-9:向User表增加一条记录。用户账户名:errin,密码:321321。

语句:INSERTINTOUser(u_count,u_passwd)values("errin","321321")

说明:这里字段列表和字段值列表是一一对应的,顺序不能变。这条语句的意思是“插入记录到User表中的u_count字段和u_passwd字段,字段的值分别为errin和321321”。

【操作步骤】

(1)打开数据库“db2.mdb”。

(2)单击窗口中的“查询”,然后单击“在设计视图中创建查询”。

(3)在弹出的对话框中选择UserInfo,然后单击“关闭”。

(4)在“查询1:选择查询”窗口中单击右键,在弹出的菜单中选择“SQL视图”。

(5)在弹出的窗口中输入:

INSERTINTOUser(u_count,u_passwd)values("errin","321321")

(6)单击Access常用工具栏上的“!”按钮,执行这条查询语句。在弹出的对话框中选择“是(Y)”,如图6-39所示。

(7)关闭查询,打开User表,其中已经添加了一条记录,如图6-40所示。

图6-39

图6-40

3.修改记录语句

修改记录语句的常用语法结构为

UPDATE表名SET字段名1=表达式1[,字段名2=表达式2…][WHERE条件表达式]

说明:UPDATE是更新关键字,表名是要更新的表的名字,SET是关键字,它后面跟的是对要更新字段赋值的表达式列表。WHERE可选子句是更新记录要满足的条件,如果省略则会把整个表的所有记录全部修改。

案例6-10:将UserInfo表中的所有用户的年龄加上1。

语句:UPDATEUserInfoSETi_age=i_age+1

说明:这条语句的意思是“更新UserInfo表中所有的记录,让i_age字段在它原来的基础上加1”。

【操作步骤】

(1)打开数据库“db2.mdb”。

(2)单击窗口中的“查询”,然后单击“在设计视图中创建查询”。

(3)在弹出的对话框中选择UserInfo,然后单击“关闭”。

(4)在“查询1:选择查询”窗口中单击右键,在弹出的菜单中选择“SQL视图”。

(5)在弹出的窗口中输入:UPDATEUserInfoSETi_age=i_age+1。

(6)单击Access常用工具栏上的“!”按钮,执行这条查询语句。在弹出的对话框中选择“是(Y)”,如图6-41所示。

(7)关闭查询,打开UserInfo表,其中所有记录的年龄都加了1,如图6-42所示。

图6-41

图6-42

4.删除记录语句

删除记录语句的常用语法结构为

DELETEFROM表名[WHERE条件表达式]

说明:DELETEFROM是删除关键字,表示要进行删除记录操作,表名是要删除数据的表的名字,可选WHERE子句是删除记录的条件,如果省略就会删除整个表中的所有记录。

案例6-11:删除UserInfo表中年龄为28的所有记录。

语句:DELETEFROMUserInfoWHEREi_age=20

说明:这条语句的意思是“删除UserInfo表中所有当i_age字段值等于28的记录”。

【操作步骤】

(1)打开数据库“db2.mdb”。

(2)单击窗口中的“查询”,然后单击“在设计视图中创建查询”。

(3)在弹出的对话框中选择UserInfo,然后单击“关闭”。

(4)在“查询1:选择查询”窗口中单击右键,在弹出的菜单中选择“SQL视图”。

(5)在弹出的窗口中输入:DELETEFROMUserInfoWHEREi_age=20。

(6)单击Access常用工具栏上的“!”按钮,执行这条查询语句。在弹出的对话框中选择“是(Y)”,如图6-43所示。

(7)关闭查询,打开UserInfo表,其中姓名为“赵六”的记录被删除了,如图6-44所示。

图6-43

图6-44

1.填空题

(1)查询UserInfo表中的所有记录的SQL语句为:SELECT

FROMUserInfo。

(2)要查询UserInfo表中的所有记录,但只需要返回i_name和i_sex字段用到的SQL语句为:SELECT

FROMUserInfo。

(3)要查询UserInfo表中字段i_age值大于17,或者小于20的记录,并只返回i_name和i_age字段,用到的SQL语句为:

。作业

(4)请写出在UserInfo表中查找满足如下条件的记录的SQL语句:返回字段i_name,i_sex;返回前3条记录;字段i_age值大于16;字段i_vip为真,字段i_name值中有“小”字;查询结果按i_id升序排序,按i_age降序排序。该SQL语句为:

(5)请写出在User和UserInfo表中查找满足如下条件的记录的SQL语句:表User中的字段u_id与UserInfo表中的字段i_uid相关联;返回字段u_count,i_name,i_age;查询条件是i_age字段值大于16,并且u_count第二位到第四位是“abc”这三个字符;查询结果按u_id倒序排序。该SQL语句为:

2.上机实训

用Access2003创建一个数据库“db.mdb”,其中包含两个表User和UserInfo,验证上述填空题中的SQL语句。

通过前面的学习我们知道,在ASP中访问数据库要通过ADO组件来实现,所以本节我们就介绍ADO组件中的Connection对象。6.3Connection对象

Connection对象又称数据库连接对象,用来建立和数据库的连接。程序在对数据库进行任何的操作,比如修改记录、插入记录、删除记录、检索记录等,都必须借助于Connection对象来完成。形象地说,Connection对象就是程序与数据库沟通的管道,所有对数据库的操作都必须经过它。6.3.1Connection对象的创建

访问数据库时,需要建立应用程序与数据库之间的连接。没有数据库连接,应用程序就无法知道在哪里找到数据库,也不知道如何连接到数据库。要建立数据库连接,首先应创建Connection对象的实例。创建一个Connection对象可通过调用Server对象的CreateObject方法。代码如下:

<%Set变量名=Server.CreateObject("ADODB.Connection")%>6.3.2连接数据源的两种方法

1.利用DSN连接数据库

我们可以利用ODBC中的“系统DSN”创建对Access数据库的连接,其操作步骤如下:

(1)单击“开始”→“设置”→“控制面板”→“管理工具”命令,出现如图6-45所示的画面。

(2)双击“数据源(ODBC)”图标,打开“DBC数据源管理器”,如图6-46所示。

图6-45

图6-46

(3)单击“系统DSN”选项卡,然后单击该选项卡下的“添加”按钮,如图6-47所示。

(4)在弹出的“创建新数据源”对话框的“名称”下拉列表中选择DriverDoMicrofoftAccess(*.mdb),然后单击“完成”按钮,出现如图6-48所示的对话框。

(5)在“ODBCMicrosoftAccess安装”对话框的“数据源名”文本框中输入数据源名称(这里为MemberDSN),在“说明”文本框中输入对该数据源的描述文字,如图6-49所示。

图6-47

图6-48

图6-49

(6)单击“选择”按钮选定一个要连接的数据库(这里数据库为member.mdb),单击“高级”按钮可设置访问这个数据库的用户名和密码,再单击“确定”按钮完成系统数据源的创建,如图6-50所示。

此时,新建的系统数据源出现在可用系统数据源列表中。如果要对该数据源进行修改,单击该数据源后再单击“配置”按钮,如图6-51所示。

图6-50

图6-51

(7)创建好系统DSN后,可以在位于同一台计算机的任何ASP文件中进行使用。例如:

<%

DimConn

SetConn=Server.CreateObject("ADODB.Connection")

Conn.Open"DSN=MemberDSN"

%>这里,参数DSN表示数据源,MemberDSN是为数据库文件member.mdb建立的数据源名称。这里也可以省略DSN=,直接简写为Conn.Open"MemberDSN"。如果数据库有用户名和密码的话,还要设置UID和PWD的值,格式如下:

<%

DimConn

SetConn=Server.CreateObject("ADODB.Connection")

Conn.Open"DSN=MemberDSN;UID=用户名;PWD=密码"

%>

2.利用字符串连接数据库

利用字符串连接数据库的代码格式如下:

<%

DimConn

SetConn=Server.CreateObject("ADODB.Connection")

Conn.Open"DRIVER={MicrosoftAccessDriver(*.mdb)};UID=用户名;PWD=密码;DBQ=数据库文件所在路径"

%>

这里,DRIVER=DriverdoMicrosoftAccess(*.mdb)是指定数据库的驱动程序,如果数据库有用户名和密码的话,还要设置UID和PWD的值。DBQ是指定数据库文件的位置,这里可以用Server对象的MapPath方法获取数据库文件的实际物理路径,例如数据库文件member.mdb位于站点根目录下db子目录中,可以写为

DBQ="&Server.MapPath("db/member.mdb")

我们最常用的是使用字符串连接数据库的方法。通常我们把数据库连接的代码放到一个独立的文件当中,在需要用到数据库连接代码时调用这个文件就可以了。

案例6-12:在站点根目录下的db子文件夹中创建一个数据库文件“member.mdb”,在这个数据库里我们用一个表来存储会员的账号、密码及相关资料,命名为MemberData,结构如表6-5所示。请用连接字符串的形式创建一个数据库连接,并将连接代码单独保存在一个名为db.inc.asp的文件中,将这个文件保存在db文件夹中。

表6-5表MemberData的结构

【操作步骤】

(1)打开站点根目录下的db子文件夹,单击鼠标右键,新建一个Access数据库文件,命名为member.mdb。打开这个数据库文件,用设计器按上述要求创建MemberData表。

(2)打开记事本编辑器,输入以下代码:

<%

DimConn

SetConn=Server.CreateObject("ADODB.Connection")

Conn.Open"DRIVER=DriverdoMicrosoftAccess(*.mdb);DBQ="&Server.MapPath("db/member.mdb")

%>

(3)将这个文件另存到站点根目录下的db文件夹中,命名为“db.inc.asp”。

案例6-13:设计一个会员注册页面“6-1a.asp”,效果如图6-52所示;设计一个处理会员注册的页面“6-1b.asp”,效果如图6-53所示;然后在“6-1b.asp”页面代码中加入调用数据库连接的文件“db.inc.asp”。

图6-52

图6-53

【操作步骤】

(1)打开记事本编辑器,输入以下会员注册页面的代码:

<HTML>

<HEAD>

<TITLE>会员注册</TITLE>

</HEAD>

<BODY>

<TABLEALIGN="CENTER"CELLPADDING="0"CELLSPACING="0">

<TR>

<TDALIGN="CENTER"><SPANCLASS="style1">会员注册</SPAN></TD>

</TR>

</TABLE>

<FORMACTION="6-1b.asp"METHOD="POST">

<TABLEWIDTH="370"ALIGN="CENTER"CELLPADDING="0"CELLSPACING="1"BGCOLOR="#000000">

<TRBGCOLOR="#FFFFFF">

<TD><P><STRONG>一、账号资料</STRONG></P></TD>

<TDWIDTH="248"></TD>

</TR>

<TRBGCOLOR="#FFFFFF">

<TDWIDTH="113"ALIGN="right">使用账号:</TD>

<TD><INPUTNAME="f_username"TYPE="text"ID="f_username"SIZE="15">*

</TD>

</TR>

<TRBGCOLOR="#FFFFFF">

<TDWIDTH="113"ALIGN="right">密码:</TD>

<TD><INPUTNAME="f_passwd"TYPE="password"ID="f_passwd"SIZE="10">*</TD>

</TR>

<TRBGCOLOR="#FFFFFF">

<TD><P><STRONG>二、个人资料</STRONG></P></TD>

<TD></TD>

</TR>

<TRBGCOLOR="#FFFFFF">

<TDWIDTH="113"ALIGN="Right">真实姓名:</TD>

<TD><INPUTNAME="f_name"TYPE="text"ID="f_name"SIZE="12">*</TD>

</TR>

<TRBGCOLOR="#FFFFFF">

<TDWIDTH="113"ALIGN="right">性别:</TD>

<TD>

<SELECTNAME="f_sex">

<OPTIONVALUE="男"SELECTED="SELECTED">男</OPTION>

<OPTIONVALUE="女">女</OPTION>

</SELECT>

</TD>

</TR>

<TRBGCOLOR="#FFFFFF">

<TDWIDTH="113"ALIGN="RIGHT">年龄:</TD>

<TD><INPUTNAME="f_age"TYPE="text"ID="f_age"SIZE="5"></TD>

</TR>

<TRBGCOLOR="#FFFFFF">

<TDALIGN="RIGHT">QQ:</TD>

<TD><INPUTNAME="f_qq"TYPE="text"ID="f_qq"SIZE="15"></TD>

</TR>

<TRBGCOLOR="#FFFFFF">

<TDALIGN="RIGHT">电子邮件:</TD>

<TD><INPUTNAME="f_email"TYPE="text"ID="f_

email"SIZE="20">*</TD>

</TR>

<TRBGCOLOR="#FFFFFF">

<TDALIGN="RIGHT">个人网页:</TD>

<TD><INPUTNAME="f_url"TYPE="text"ID="f_url"SIZE="30">

</TD>

</TR>

<TRBGCOLOR="#FFFFFF">

<TDCOLSPAN="2"ALIGN="CENTER"><BR>

<INPUTTYPE="submit"NAME="Submit"VALUE="提交资料">

<INPUTTYPE="reset"NAME="Submit2"VALUE="重置资料">

<BR></TD>

</TR>

</TABLE>

</FORM>

</BODY>

</HTML>

(2)将这段代码另存为“6-1a.asp”,保存到站点根目录。

(3)用记事本编辑器新建一个空白文档,输入以下处理会员注册信息的代码:

<!--#IncludeFile="db/db.inc.asp"-->

<HTML>

<HEAD>

<METAHTTP-EQUIV="Content-Type"CONTENT="text/html;charset=gb2312">

<TITLE>会员注册结果</TITLE>

</HEAD>

<BODY>

<TABLEALIGN="center"CELLPADDING="0"CELLSPACING="0">

<TR>

<TDALIGN="center"><SPANCLASS="style1">会员注册结果</SPAN></TD>

</TR>

</TABLE>

<TABLEWIDTH="359"ALIGN="center"CELLPADDING="0"CELLSPACING="1"BGCOLOR="#0000

00">

<TRBGCOLOR="#FFFFFF">

<TDALIGN="CENTER"><SPANCLASS="style2">恭喜你注册成功!</SPAN><BR>

<BR>

<SPANCLASS="style2">很遗憾,你本次注册失败了!</SPAN></TD>

</TR>

</TABLE>

</BODY>

</HTML>

(4)将这段代码另存为“6-1b.asp”,保存到站点根目录。

在“6-1b.asp”文件中,我们用到了以下引用数据库连接文件的语句:

<!--#IncludeFile="db/db_inc.asp"-->这条Include语句的作用是调用站点根目录下db子文件夹中的“db_inc.asp”文件,并把这个文件的内容作为本文件的一个部分来执行。这里“6-1b.asp”是母文件,“db_inc.asp”是子文件,要包含的文件名可以带上路径如“db/db_inc.asp”,如果只有文件名则默认的是母文件所在的目录。在编程时如果多次用到某段代码,我们可以把它放在一个独立的文件里,在用到这段代码时调用这个文件就可以了,这样可以大大减少编写大量重复代码的劳动。这里把连接数据库代码放在一个独立的文件中还有一个好处,就是如果数据库的名字改变或路径改变时,我们只要修改“db_inc.asp”文件就可以了。这里要注意是Include语句要写在<%%>标记之外。6.3.3Connection对象的方法

Connection对象的方法见表6-6。

表6-6Connection对象的方法1. Open方法

使用Connection对象的Open方法可建立到数据源的物理连接,在该方法成功完成后,连接才真正建立,在ASP中才能对数据源发出各种操作命令。

调用Open方法的语法格式如下:

Conn.Open[ConnectionString][,UserID][,Password][,Options]

说明:参数conn为已建立的数据库的Connection对象实例。ConnectionString表示连接字符串。

2. Close方法

Close方法用来关闭Connection对象或Recordset对象,以便释放对象所有关联的系统资源。关闭对象并不能将它从内存中删除,通过更改属性设置还可以再次打开它。要将对象从内存中完全删除,可将对象变量的值设置为Nothing。因此,只要在我们的程序中使用过数据库,在使用完以后就必须用到下面的关闭数据库的语句,以释放对象所占用的资源。

<%

Conn.Close

SetConn=Nothing

%>

3. Execute方法

Execute方法用来执行指定的查询、SQL语句、存储过程或特定提供者的文本等内容,语法格式如下:

conn.Execute

CommandText[,RecordsAffected][,Options]

说明:conn是一个变量名,为已建立的数据库的Connection对象实例。CommandText是一个字符串,包含表名、SQL语句、存储过程或特定提供者的文本。RecordsAffected是一个变量,返回本次操作所影响到的记录数。Options用来指示数据提供者应怎样解析CommandText参数,Options参数可以指定为表6-7中所列出的值。

表6-7Options参数可选值案例6-14:向member.mdb数据库中添加表6-8所示的两条新的会员记录信息。表6-8会员信息记录【操作步骤】

(1)用记事本编辑器打开“6-1b.asp”,修改代码如下:

<!--#IncludeFile="db/db.inc.asp"-->

<HTML>

<HEAD>

<METAHTTP-EQUIV="Content-Type"CONTENT="text/html;charset=gb2312">

<TITLE>会员注册结果</TITLE>

</HEAD>

<BODY>

<TABLEALIGN="center"CELLPADDING="0"CELLSPACING="0">

<TR>

<TDALIGN="center"><SPANCLASS="style1">会员注册结果</SPAN></TD>

</TR>

</TABLE>

<TABLEWIDTH="359"ALIGN="center"CELLPADDING="0"CELLSPACING="1"BGCOLOR="#000000">

<TRBGCOLOR="#FFFFFF">

<TDALIGN="CENTER">

<%

'定义变量

Dimf_username,f_passwd,f_name,f_sex,f_age,f_qq,f_email,f_url

f_username=TRIM(Request.Form("f_username"))'接收到账号

f_passwd=TRIM(Request.Form("f_passwd"))'接收密码

f_name=TRIM(Request.Form("f_name"))'接收真实姓名

f_sex=TRIM(Request.Form("f_sex"))'接收性别

f_age=TRIM(Request.Form("f_age"))'接收年龄

f_qq=TRIM(Request.Form("f_qq"))'接收QQ

f_email=TRIM(Request.Form("f_email"))'接收E-mail

f_url=TRIM(Request.Form("f_url"))'接收个人网页

'判断资料是否填写完整

Iff_username=""orf_passwd=""orf_name=""orf_email=""then

'提示注册失败信息

Response.Write"你本次注册失败了!原因是:资料填写不完整!"

Else

'向数据库中写入一条记录

Conn.Execute("InsertIntoMemberData(m_username,m_passwd,m_name,m_sex,m_age,m_qq,m_email,m_url)values('"&f_username&"','"&f_passwd&"','"&f_name&"','"&f_

sex&"',"&f_age&",'"&f_qq&"','"&f_email&"','"&f_url&"')")

'提示注册成功信息

Response.Write"<SPANCLASS=style2>恭喜你注册成功!</SPAN>"

EndIf

'关闭数据库连接,释放对象占用的资源

conn.Close

SetConn=Nothing

%>

</TD>

</TR>

</TABLE>

</BODY>

</HTML>

(2)将该文件保存为“6-1b.asp”。

(3)在浏览器中执行页面“6-1a.asp”,输入第一个会员的信息,如图6-54所示。

(4)点击提交注册按钮,显示注册结果如图6-55所示。

(5)打开数据库“member.mdb”中的MemberData表,如图6-56所示。

(6)用同样的方法再次在浏览器中执行页面“6-1a.asp”,将第二个会员的信息写入数据库。

图6-54

图6-55

图6-56

4. BeginTrans、CommitTrans、RollbackTrans方法

BeginTrans、CommitTrans和RollbackTrans3种方法是Connection对象为我们提供的与数据库事务处理相关的方法。事务就是一组对数据库的操作。我们可以把一组对数据库的操作看成是一个事务,当这个事务里的每一个操作都完成了,数据才被写入到数据库,否则只要出现一点点的错误,那么所有的操作都变成无效的了,这样就可以保证数据库的完整性。

5. Error对象和Errors集合

Error对象又称为错误对象,是Connection对象的子对象。Errors集合可以取得ADO组件运行时发生的错误和警告信息。当出现错误的时候,一个或多个ERROR对象会被放到Connection对象的Errors集合中。Error对象和Errors集合的关系就类似于士兵和军队的关系。

我们可以通过Errors对象的Count属性来获得集合中error对象的个数。其语法格式如下:

变量=Connection.Errors.Count

如果Errors.Count大于零了就说明有错误发生了。如果我们使用完Errors集合后还要在其它地方判断,就要先清空Errors集合中的对象,以免混淆。这就要用到Errors集合的Clear方法。其语法格式如下:

Connection.Errors.Clear

要想知道发生了什么错误,我们就要用到Error对象,我们可以通过Errors集合的Item方法来取得集合中的Error对象,其语法格式如下:

Seterr=Connection.Errors.Item(Error对象索引)一个Errors集合可能包含多个Error对象,所以我们要用一个索引值参数来说明要获取的是哪一个Error对象。这个索引值的范围是从0开始到Count属性值减1。

Error对象还为我们提供了Number属性,用来取得错误代码或警告代码,同时它还提供了Description属性用来取得错误或警告发生的原因。语法格式如下:

变量=Error.Number

变量=Error.Description在ASP中通过设置我们可以自己编写处理错误的代码,它就是OnError语句。例如我们经常会在程序的开头用到以下语句:

<%OnErrorResumeNext%>

它的功能是如果程序发生了错误,就跳过发生错误的代码,继续向下运行。

ASP还为我们提供了一个更高级的错误对象:Err对象。其用法与Error对象差不多。我们以后可以在程序中加入以下语句来调试程序:

<%

'用来取得错误代码,如果不为0则有错误发生

Response.Write"错误号"&Err.Number

'输出出错信息

Response.Write"错误原因"&Err.Description

'清空Err对象

Err.Clear

%>

案例6-15:在“6-1b.asp”文件中增加数据库事务处理功能和数据库操作出错判断处理功能。

【操作步骤】

(1)用记事本编辑器打开“6-1b.asp”。修改代码如下:

<%'如果程序发生了错误,就跳过发生错误的代码,继续向下运行

OnErrorResumeNext

%>

<!--#IncludeFile="db/db.inc.asp"-->

<HTML>

<HEAD>

<METAHTTP-EQUIV="Content-Type"CONTENT="text/html;charset=gb2312">

<TITLE>会员注册结果</TITLE>

</HEAD>

<BODY>

<TABLEALIGN="center"CELLPADDING="0"CELLSPACING="0">

<TR>

<TDALIGN="center"><SPANCLASS="style1">会员注册结果</SPAN></TD>

</TR>

</TABLE>

<TABLEWIDTH="359"ALIGN="center"CELLPADDING="0"CELLSPACING="1"BGCOLOR="#000000">

<TRBGCOLOR="#FFFFFF">

<TDALIGN="CENTER">

<%'定义变量

Dimf_username,f_passwd,f_name,f_sex,f_age,f_qq,f_email,f_url,myErrors

f_username=TRIM(Request.Form("f_username"))'接收到账号

f_passwd=TRIM(Request.Form("f_passwd"))'接收密码

f_name=TRIM(Request.Form("f_name"))'接收真实姓名

f_sex=TRIM(Request.Form("f_sex"))'接收性别

f_age=TRIM(Request.Form("f_age"))'接收年龄

f_qq=TRIM(Request.Form("f_qq"))'接收QQ

f_email=TRIM(Request.Form("f_email"))'接收E-mail

f_url=TRIM(Request.Form("f_url"))'接收个人网页

'判断资料是否填写完整

Iff_username=""ORf_passwd=""ORf_name=""ORf_email=""THEN

Response.Write"<SPANCLASS=style2>你本次注册失败了!原因是:资料填写不完整!</SPAN>"

Else

'开启数据库事务管理功能

Conn.BeginTrans

'向数据库中写入一条记录

Conn.Execute("InsertIntoMemberData(m_username,m_

passwd,m_name,m_sex,m_age,m_qq,m_email,m_url)values

('"&f_username&"','"&f_passwd&"','"&f_name&"','"&f_sex&"',"&f_age&",'"&f_

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论