770 likes | 923 Views
第4章 ASP 存取数据库. 学习目的. 在 ASP 中存取数据库是非常重要的,也是比较难学的。 学完后应该能开发简单的 BBS 等网络程序。. 本章要讲的内容. 数据库预备知识 利用数据库存取组件存取数据库 连接数据库 利用 Select 语句查询记录 利用 Insert 语句添加新记录 利用 Delete 语句删除记录 利用 Update 语句修改记录 对多个数据表进行操作 ADO . 数据库预备知识. 大型站点中一般采用 SQL、 Oracle 等数据库. 对于小型站点,也可以用 Access 数据库。
E N D
学习目的 • 在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 db • Set 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, strConn Set db=Server.CreateObject("ADODB.Connection") strConn="DBQ=" & Server.Mappath("address.mdb") & ";Driver={Microsoft Access Driver (*.mdb)}" db.Open strConn
open方法: 设置数据源(addr)时: Dim db Set 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 db Set 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 db Set 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 指定数据查询信息是否要先行编译、存储。