第4章 ASP 存取数据库

Post on 19-Jan-2016

140 views 0 download

description

第4章 ASP 存取数据库. 学习目的. 在 ASP 中存取数据库是非常重要的,也是比较难学的。 学完后应该能开发简单的 BBS 等网络程序。. 本章要讲的内容. 数据库预备知识 利用数据库存取组件存取数据库 连接数据库 利用 Select 语句查询记录 利用 Insert 语句添加新记录 利用 Delete 语句删除记录 利用 Update 语句修改记录 对多个数据表进行操作 ADO. 数据库预备知识. 大型站点中一般采用 SQL、 Oracle 等数据库. 对于小型站点,也可以用 Access 数据库。 - PowerPoint PPT Presentation

Transcript of 第4章 ASP 存取数据库

第 4 章 ASP 存取数据库

学习目的

在 ASP 中存取数据库是非常重要的,也是比较难学的。

学完后应该能开发简单的 BBS 等网络程序。

本章要讲的内容 数据库预备知识 利用数据库存取组件存取数据库

– 连接数据库– 利用 Select 语句查询记录– 利用 Insert 语句添加新记录– 利用 Delete 语句删除记录– 利用 Update 语句修改记录– 对多个数据表进行操作

ADO

数据库预备知识

大型站点中一般采用 SQL 、 Oracle 等数据库 . 对于小型站点,也可以用 Access 数据库。 读取 Access 数据库和读取 SQL 数据库基本上

是一样的,如要改成读取 SQL 库,程序几乎不用改动

创建一个 Access 数据库

首先创建一个 Access 数据库表,打开 Access2000/XP ,选择“新建数据库”,数据库命名为:“ person.mdb” 。

输入表的结构

单击“使用设计器创建表”出现输入界面,在其中输入表的结构。

创建的“ grade” 表 输入完以上的信息后,单击保存图标,并命名

为“ grade” ,右击刚创建的“ grade” 表,选择“打开”,将产生一个空表。

输入人员的信息

在出现的界面中输入人员的信息,如图 4-4 所示。

rs 的结构

假定建立了一个 RecordSet 对象的实例 rs , rs 的内部结构和数据库表一样具有二维结构。 rs 对象包含一个无形的指针,默认的情况下指向第一行。

rs 的结构

其中:写法 rs(0) 、 rs(“ 学号” ) 、 rs.Fields(0) 和rs.Fields(“ 学号” ) 是相同的,写法 rs(2) 、 rs(“ 语文” ) 、rs.Fields(2) 和 rs.Fields(“ 语文” ) 是相同的。其余类推。

根据上表和注释: rs(3).Name = rs.Fields(3).Name = " 数学 " ; rs(4).Name=" 英语 " ; 假设当前的记录指向第三条,那么 rs(1).Value=rs(" 姓名 ")=rs(1)= " 张敏 " rs(4).Value=rs(4)=rs(" 英语 ")=200 有了这些基础,就可以进行数据库操作。

连接数据库

设置数据源 不设置数据源的方法

设置数据源

ASP 提供了一个非常有用的数据库存取组件,该组件利用 ADO ( Active Data Objects )技术来存取符合 ODBC ( Open Database Connectivity )标准的数据库。利用该组件,我们就可以轻松存取数据库了。不过,一般需要先用 ODBC 标识数据库,也就是设置数据源,

方法:开始 | 设置 | 控制面板 |ODBC 数据源,按着提示一步一步设置即可。

连接数据库

设置数据源的方法 <%

– Dim db – Set db=Server.CreateObject(“ADODB.Connection”) – db.Open “wwwlink” ‘ 打开数据源 wwwlink

%>

连接数据库

不设置数据源的方法 <%

– Dim db – Set db=Server.CreateObject(“ADODB.Connection”) – db.Open "Dbq="&Server.Mappath("wwwlink.mdb")&“– ;Driver={Microsoft Access Driver (*.mdb)}"

%>

使用 SQL 语句

SQL 语句主要包括数据查询语言( Data Query Language , DQL )

– 数据操作语言( Data Manipulation Language , DML )。 首先介绍 DQL 的使用方法。

Select 语句

语法:– Select 字段列表 From 数据表列表 [Where

条件 ][Order By 字段 ]

Select 的三大基本格式 1. 基本句型一:(最简单的 select 语句) Select 字段名 From 数据表

( 1 ) Select * From grade 功能说明:将 grade 表中的所有字段取出来。 ( 2 ) Select 学号 , 姓名 from grade 功能说明:将 grade 表中学号和姓名字段取出来。 ( 3 ) Select 学号 , 姓名 , 语文 + 数学 + 英语 as 总

成绩 from grade 功能说明:将 grade 表中的学号和姓名取出来,并将

语文、数学和英语成绩相加产生虚拟列总成绩。

基本句型二:(使用条件查询) 2. 基本句型二:(使用条件查询) Select 字段名 From 数据表 where 筛选条件

( 1 ) Select * from grade where 数学 >60 功能说明:把所有数学成绩大于 60 分的记录选出来。

( 2 ) Select * from grade where 数学 =100 or 语文 =100

功能说明:把数学成绩等于 100 分或者语文成绩等于100 分的人选出来。

基本句型三:(进行排序) 3. 基本句型三:(进行排序) Select 字段名 From 数据表 Order by 字段名 ( 1 ) Select * from grade order by 数学 注:从低

到高排序 功能说明:从 grade 表中取出所有字段,并按数学成绩排

序。 ( 2 ) Select * from grade order by 数学 , 语文 功能说明:从 grade 表中取出所有字段,并按数学成绩排

序,如果数学成绩相同则按照语文成绩排序。 ( 3 ) Select * from grade order by 数学 desc 注:

从高到低排序 功能说明:从 grade 表中取出所有字段,并按数学成绩倒

序。 ( 4 ) Select top 5 * from 成绩单 功能说明:从 grade 表中取出前五条记录的所有字段。

Like 子句 在实际应用系统中,模糊查询用得比较多,比如在一些网站

上经常会提供按照关键字查询,可以利用 Select 语句的Like 子句方便地实现模糊查询。

首先分析一下 Like 字句的使用方法。 ( 1 )基本格式一:“ _” 匹配。

– 说明:每个下划线匹配一个任意字符,注意只匹配一个字符。比如:姓名 like '_ 敏 ' ,匹配姓名以“敏”字结尾且字数等于二的所有数据记录,如:“张敏”。

( 2 )基本格式二:“ %” 匹配。– 比如:姓名 Like '% 敏 %' ,匹配姓名中出现“敏”的所

有数据记录,如:“周惠敏”,“于敏”、“敏大”、“敏二”等。

使用 SQL 语句操作数据库

基本 SQL 语言分成三大体系。 ( 1 )数据定义语言 DDL :用来定义数据。 ( 2 )数据查询语言 DQL :数据检索语言。 ( 3 )数据操作语言 DML :包括 INSERT 语

句、 UPDATE 语句和 DELETE 语句。

DELETE 指令

( 1 ) DELETE 指令:删除数据记录。 基本语法:

DELETE FROM 数据表 WHERE 条件例:delete from grade where 数学 =0 说明:删除所有数学成绩为零的记录

UPDATE 指令 ( 2 ) UPDATE 指令:更新数据记录。 基本语法:

UPDATE 数据表 SET 字段值 = 新值 where 条件例 1 : update grade set 数学 = 数学 +10 说明:将 grade 表中

所有人的成绩加 10 分 例 2 : update grade set 数学 =100 where 姓名 like '% 敏 %' 说明:将姓名中含有敏的人的数学成绩更新为 100 分

INSERT INTO 指令:添加

( 3 ) INSERT INTO 指令:添加数据记录。

基本格式 1 : INSERT INTO 数据表 VALUES (字段新值) 基本格式 2 : INSERT INTO 数据表(字段一,字段二,……)

VALUES (字段新值)

两种格式的区别是:当 values 含有数据库表所有字段的值,并且顺序和数据库字段一致时,就可以省略数据库表后面的字段名称。

例 1 : Insert into grade( 学号 , 姓名 , 数学 )values (1234,

' 周润发 ',70)

例 2 : Insert into grade values(5678, ' 周润发 ',70,80,90) 说明:该语句等价于: Insert into grade( 学号 , 姓名 , 语文 , 数学 , 英语 )

values(5678, ' 周润发 ',70,80,90) 因为包含数据库所有字段,而且顺序和数据库一致,

所以字段列表可以省略。

对多个数据表进行操作

查询时经常需要从两张表里读取数据,如现在有两张表 TA 、 TB– Select TA.student_id,TA.name,

TB.department,TB.age From TA,TB Where TA.student_id=TB.student_id

数据库存取组件 ADO

ASP 提供了一个非常有用的内置的数据库存取组件,该组件利用 ADO ( Active Data Objects )技术来存取符合 ODBC ( Open Database Connectivity )标准的数据库。过去用 CGI 来存取数据库非常不容易,现在利用ADO 技术就非常简单了。 ActiveX Data Object 可以提供 Web页面与数据库结合的数据库技术。

将传统的数据库后台管理模式放到 Web页面上来进行。使数据库的存取更新更加简单、方便。

主要包含 3 个对象:– Connection 、 Command 、 Recordset

简介:

Connection :连接数据库(连接对象) Command :对数据库进行操作(命令对象) Recordset :对数据库中的记录进行操作

对数据库进行操作时,先用 Connection 对象来建立与数据库的连接,然后用 Command 对象或 Recordset 对象来对数据库进行操作。

4. 1 Connection 对象4.1.1 建立 Connection 对象

对数据库进行操作前,先要建立 Connection 对象。方法:– 利用 server 对象的 creatobject 方法– <%

Dim dbSet db=server.creatobject(“ADODB.connection”)

– %>

4.1.2 Connection 对象的方法:

Open: 建立 Connection 对象与数据库间的连接 Close:关闭 Connection 对象 Execute:执行对数据库的操作 Begintrans: 开始事务处理 Committrans: 提交处理结果 Rollbacktrans: 取消处理结果

一、 open 方法: ( connection 对象名) Db.open 参数 参数: Dbq= 数据库的物理路径

Driver= 数据库的类型(驱动程序) Dsn=ODBC 数据源(可省略)

没有设置数据源时:Dim db, strConnSet db=Server.CreateObject("ADODB.Connection") strConn="DBQ=" & Server.Mappath("address.mdb")

& ";Driver={Microsoft Access Driver (*.mdb)}"db.Open strConn

open 方法:

设置数据源( addr)时:Dim dbSet

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

db.Open “Dsn=addr”(db.open “addr”)

优点:简单缺点:可移植性

二、 close 方法:

<% Db.close Set db=nothing ’ 从内存中清除 %>

当一个页面关闭时, connection 对象会自动关闭

三、 Execute 方法:

语法:– 1 、 db.execute(SQLstring)– 2 、 set Recordset 对象 =

db.execute(SQLstring)– (返回一个 Recordset 对象)

四、 SQL 语言

– Select 查询语句– Insert 插入语句– Delete 删除语句– Update 修改语句– Create Table创建数据表语句 114– Alter Table 修改数据表字段语句 114– Drop Table 删除数据表语句 115

1> Select 语句 : 查询记录

语法:– Select 字段列表 From 数据表列表 [Where 条

件 ][Order By 字段 ] 例子:

– Select name,URL,intro From link – Select * From link– Select * From link Where name=” 新浪” – Select * From link Order By link_id

2> Insert 语句 :添加新记录

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

Values (字段值 1 ,字段值 2 ,…) 例如:

– Insert Into link (name,URL,intro) Values(“ 中国教育网” ,”www.edu.cn”,” 中国教育部网站” )

3> Delete 语句 :删除记录

语法比较简单:– Delete From 数据表名 [Where 条件 ]

例如:– Delete From link Where name=” 网易”

4> Update 语句 :修改记录

语法如下:– Update 数据表名 Set 字段 1 =字段值 1 ,字段

2 =字段值 2 ,… [Where 条件 ] 例如:

– Update link Set intro ”= 非常棒的网站” Where name=” 新浪”

5>Creat table: 创建数据表

语法:– Creat table 数据表名(字段 1 名称 字段 1

类型,字段 2 名称 字段 2 类型,……) 类型:

– Text: 文本, long<=255byte– Char(n): 文本, long<=nbyte– Memo: 备注, long<=65535byte– Number: 数值,双精度数字

数据类型:

Int:整数 Data/Time:日期 /时间, 100-9999年 Logical:逻辑, true/false Oleobject:Ole 对象(数据库中链接或嵌入的

对象,如: excel 、 word 、图片、其他) Autonumber:自动编号

例:

Creat table lab1(name text,age int,birthday date,intro memo,flag logical)

Creat table lab2(name text not NULL,age int, intro memo)– 不允许 name 字段为空

6>Alter Table:修改数据表字段

增加或减少一个字段 Alter Table 数据表名 Add column 字段名

字段类型– 增加一个字段

Alter Table 数据表名 drup column 字段名– 删除一个字段

7>Drup Table:删除数据表

Drup Table 数据表名

Drup Table lab1 Drup Table lab2

4.1.3 Connection 对象的属性: 1 、 commandtimeout

– 设置 execute 方法执行的最长时间30 秒 <% db.commandtimeout=90 %> 如果设置为 0 ,无限制

2 、 connectiontimeout– 设置 open 方法执行的最长时间 15 秒

<% db.connectiontimeout=30 %> 如果设置为 0 ,无限制

Connection 对象的属性: 3 、 connectionstring

– 指定数据库链接信息,可用来打开数据库例:<%Dim dbSet

db=Server.CreateObject("ADODB.Connection") db.connectionstring= "DBQ=" &

Server.Mappath("address.mdb") & ";Driver={Microsoft Access Driver (*.mdb)}"

Db.open

%>

Connection 对象的属性: 4 、 mode

– 设置连接数据库的权限– Admoderead(1) 只读– Admodewrite(2) 只写– Admodereadwrite(3) 可读写

Dim dbSet

db=Server.CreateObject("ADODB.Connection")Db.mode=1 Db.open

4.2 Command 对象

Command 对象简介– 又称命令对象,主要用来对数据库进行查询,

并将查询结果存储在 recordset 对像中。– Command 对象使用时,要先创建

connection 对象, Command 对象向数据库提出操作请求(通过 SQL 指令),并将结果返回给 recordset 对象。

建立 Comand 对象 方法:

– <%

– Dim db,cmd

– Set db=Server.CreateObject(“ADODB.Connection”)

– db.Open ”addr” ‘addr 为数据源名称

– Set cmd=Server.CreateObject(“ADODB.Command”)

– cmd.ActiveConnection=db

– %>

4.2.1 Command 对象的属性属性 说明 ActiveConnection指定 Connection 连接对象 CommandText 指定数据库查询信息 CommandType 指定数据查询信息的类

型 CommandTimeout Command 对象的

Execute 方法的最长执行时间 Prepared 指定数据查询信息是否

要先行编译、存储。

1>ActiveConnection

指定 Connection 连接对象 语法:

– Command 对象 .activeconnection=connection 对象– 或(没有建立 connection 对象):– Command 对象 .activeconnection=“ 数据源名称”

2>CommandText

指定数据库查询信息 语法:

– Command 对象 .commandtext=*

– *: “SQL 语句” “ 数据表名称”

3>Prepared

指定数据查询信息是否要先行编译、存储。 语法:

– Command 对象 .prepared=true/false

– True: 表示需要先编译(以后运行速度快)

4.2.2 Command 对象的方法

方法 说明 Execute 执行数据库查询(与 connection

相似) CreateParameter 用来创建一个 Parameter 子

对象

4.2.3 实例 (1)

说明:– 用 command 对象实现与数据库的连接和操作。– 所使用的数据库是当前目录下的

address.mdb– address.mdb 中数据表 users 中字段名为

name 、 tel 、 email 、 home 、 intro 。

实例 (1)--1

<% '建立 Connection 对象 Dim db, strConn strConn="DBQ=" & Server.Mappath("address.mdb")

& ";Driver={Microsoft Access Driver (*.mdb)}" Set db=Server.CreateObject("ADODB.Connection") db.Open strConn '建立 Command 对象 Dim cmd Set cmd= Server.CreateObject("ADODB.Command") cmd.ActiveConnection=db

实例 (1)--2

'查询记录 Dim rs,strSql strSql="Select * From users" cmd.CommandText= strSql Set rs=cmd.Execute Do While Not rs.Eof Response.Write rs("name") &

"<br>" rs.Movenext Loop

实例 (1)--3

' 添加记录 strSql ="insert into

users(name,tel,email) values('李玫 ','88888888','limei@263.net')"

cmd.CommandText=strSql cmd.Execute ' 更新记录 strSql ="update users set

tel='66666666' where name='李玫 '" cmd.CommandText=strSql cmd.Execute

实例 (1)--4

' 删除记录,删除李玫的记录 strSql="delete from users

where name='李玫 '" cmd.CommandText=strSql cmd.Execute db.close set db=nothing %>

4.3 Recordset 对象

就是用来返回一个记录集,该记录集包含所要查询的全部数据

查询数据库前要先生成 Recordset 对象 对数据库进行修改、添加、删除操作时,可以

不需要用到 Recordset 对象,而直接用connection 对象。但是,有时用 Recordset对象更简便。

4.3.1 建立 Recordset 对象

语法:– Set Recordset 对象

=Server.CreateObject ("ADODB.Recordset")

一般情况下,应先建立connection 、 command 对象,再来建立Recordset 对象

4.3.2 Recordset 对象的属性 一、打开记录集的设置 1>Source: 设置数据库查询信息

– Recordset 对象 .source=*– * : command 对象名、数据表名、 SQL 语句

2>Activeconnection: 设置数据库连结信息– Recordset 对象 . Activeconnection=*– * : connection 对象名、数据库连结信息字符

Recordset 对象的属性

3>Cursortype 设置纪录指针类型– Recordset 对象 .cursortype=0(1 、 2 、 3)– P164 表 9-20

4>Locktype 设置纪录集锁定类型– Recordset 对象 .locktype=1(2 、 3 、 4)– P165 表 9-21

Recordset 对象的属性 二、打开记录集后的一些操作 1>Recordcount 纪录集中纪录总数

– Var=Recordset 对象 .cursortype 2>Bof 记录指针在记录集开头?

– Var=Recordset 对象 .Bof– 是: Var=true 否: Var=false

3>Eof 记录指针在记录集结尾?– Var=Recordset 对象 .Eof– 是: Var=true 否: Var=false

Recordset 对象的属性 三、数据分页的一些功能 1>Pagesize 设置分页显示时每页纪录数

– Recordset 对象 .Pagesize=n 2>Absolutposition 设置当前纪录指针

– Recordset 对象 .Absolutposition=m(m<=n) 3>Pagecount 设置分页显示时总页数

– Var=Recordset 对象 .Pagecount 4>Absolutpage 设置当前页面指针

– Recordset 对象 .Absolutpage=m(m<= 总页数 )

4.3.3 Recordset 对象的方法

一、 open 打开纪录集– Recordset 对象 .open [source],

[activeconnection], [cursortype],[locktype],[options]

– Options: 表 9-22(P165)– Sourse:command 对象名、 SQL 语句、数据表

例: dim db,connstr connstr="DBQ="&Server.Mappath("bbs.mdb")&"

;DRIVER={Microsoft Access Driver (*.mdb)};" set

db=Server.CreateObject("ADODB.connection") db.Open connstr ’创建一个 recordset 对象 sql="select * from bbs where layer=1 " set rs=Server.CreateObject("ADODB.Recordset") rs.Open sql,db,1 ‘1 : option, 命令类型

Recordset 对象的方法 二、 close 关闭 Recordset 对象

– Recordset 对象 .close

三、 Requery 重新打开纪录集– Recordset 对象 .requery ‘ 先关闭后打开

四、 movefirst 纪录指针移到第一条纪录– Recordset 对象 .movefirst

五、 moveprevious 纪录指针移到上一条纪录– Recordset 对象 .moveprevious

Recordset 对象的方法 六、 movenext 纪录指针移到下一条纪录

– Recordset 对象 .movenext

七、 movelast 纪录指针移到最后一条纪录– Recordset 对象 .movelast

八、 move 纪录指针移到指定纪录– Recordset 对象 .move number,start– Start: 设置指针起始位置(默认:当前位置)– Number:>0 向下移 ,<0 向上移

Recordset 对象的方法 九、 addnew 添加纪录

– Recordset 对象 .addnew 字段名数组,字段值数组– 如果只有一个字段– Recordset 对象 .addnew 字段名,字段值

十、 delete 删除当前纪录– Recordset 对象 .delete

十一、 resync 让客户端纪录集与服务器同步更新– Recordset 对象 .resync[ 参数 ]– 参数: P175 表 9-27

Recordset 对象的方法 十二 、 updata 更新数据库数据

– Recordset 对象 .updata

执行 addnew 、 delete 后必须执行 updata ,才能真正更新数据库

– Recordset 对象 .updata 字段名,字段值直接更新当前纪录的某一字段的数值

十三、 cancelupdata 取消刚才的更新– Recordset 对象 .canceluptata

4.3.4 Recordset 对象应用

9_7.asp 分页显示 9_8.asp 利用 Recordeset 对象更新数据库 9_9.asp

9.7.9 Fields集合和 Field 对象

一个记录集就好比一个电子表格,该表格内总是包含有许多列(字段),每一个字段就是一个 Field 对象,而所有 Field 对象组合起来就是一个 Fields集合。

9.7.9 Field 对象的用法 <% 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 %>

9.7.9 Field 对象的用法看例子 9-11.asp ,常用属性举例,也可以如下写

– <%– Response.Write rs(“name”).name– Response.Write rs(“name”) ‘Value 属性可省略– Response.Write rs(“name”).type– Response.Write rs(“name”). Definedsize– %>

9.8 Errors集合和 Error 对象

同 Fields集合和 Field 对象一样,一个错误就是一个 Error 对象,若干个 Error 对象就组成了 Erros集合。

看 9-12.asp