第7章ADO数据访问接口.docx
- 文档编号:4548500
- 上传时间:2023-05-07
- 格式:DOCX
- 页数:57
- 大小:639.80KB
第7章ADO数据访问接口.docx
《第7章ADO数据访问接口.docx》由会员分享,可在线阅读,更多相关《第7章ADO数据访问接口.docx(57页珍藏版)》请在冰点文库上搜索。
第7章ADO数据访问接口
。
第三部分ASP操作数据库
第7章ADO数据访问接口
本章要点
本章介绍ADO的基本概念,以及如何在ASP程序中使用ADO的对象。
介绍ADO的对象Connection,RecordSet和Command的使用。
介绍SQL语句的基本概念及如何利用SQL语句操作数据库。
介绍访问数据库的三个基本格式。
7.1ADO概述
使用ADO(ActiveXDataObject,ActiveX数据对象),可以对几乎所有数据库进行读取和写入操作。
可以使用ADO来访问MicrosoftAccess,MicrosoftSQLServer和Oracle等数据库。
ADO常用的四种对象及其功能如下。
(1)连接对象(Connection):
用来连接数据库。
(2)记录集对象(RecordSet):
用来保存查询语句返回的结果。
(3)命令对象(Command):
用来执行SQL(StructuredQueryLanguage)语句或者SQLServer的存储过程。
(4)参数对象(Parameter)。
用来为存储过程或查询提供参数。
下面介绍常用的连接对象(Connection)、记录集对象(RecordSet)、命令对象(Command)。
7.2Connection数据对象
与数据库的所有通信都通过一个打开的Connection对象进行。
对一个数据库进行数据的插入和读取之前,必须先打开与这个数据库的连接。
如何打开和关闭一个数据库连接?
首先创建一个Access数据库表,打开Access2000/XP,选择“新建数据库”,数据库命名为:
“person.mdb”,出现如图7-1所示界面。
单击“使用设计器创建表”出现输入界面,在其中输入表的结构,如图7-2所示。
输入完以上的信息后,单击保存图标,并命名为“grade”,右击刚创建的“grade”表,选择“打开”,将产生一个空表,如图7-3所示。
在出现的界面中输入人员的信息,如图7-4所示。
图7-1新建数据库表
图7-2输入数据字段名
图7-3产生一个空表
图7-4输入数据库表的内容
输入完毕后,保存关闭窗口,表命名为“grade”。
下面对其结构进行简要的分析。
假定建立了一个RecordSet对象的实例rs,rs的内部结构和数据库表一样具有二维结构。
rs对象包含一个无形的指针,默认的情况下指向第一行,结构如图7-5所示。
图7-5关系型数据库表与RecordSet对象
其中:
写法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
有了这些基础,就可以进行数据库操作。
7.2.1打开和关闭数据库连接
要建立与一个数据库的连接,首先创建Connection对象的一个实例,然后调用Connection对象的Open方法打开一个连接,首先通过程序7-01.asp输出数据库的表头。
案例名称:
输出数据库的表头
程序名称:
7-01.asp
<%@Language=Jscript%>
- "+rs(i).Name);
<%
varconn=Server.CreateObject("ADODB.Connection");
conn.Open("driver={MicrosoftAccessDriver(*.mdb)};dbq="+
Server.MapPath("person.mdb"));
rs=conn.Execute("select*fromgrade");
for(i=0;i { Response.Write("
}
conn.close();
%>
显示的结果如图7-6所示。
图7-6输出数据表的表头
在解释程序之前,首先介绍一个通用的打开数据库的格式。
格式一:
数据库调用的基本格式
格式说明:
利用Execute方法建立RecordSet对象
//第一步:
建立Connection对象
varconn=Server.CreateObject("ADODB.Connection");
//第二步:
使用Connection对象的Open方法建立数据库连接
conn.Open("driver={MicrosoftAccessDriver(*.mdb)};dbq="+
Server.MapPath("Access数据库"));
//第三步:
使用Connection对象的Execute方法执行SQL语句
//如果执行查询语句
rs=conn.Execute("数据查询语句");
//如果执行数据操纵语句
conn.Execute("数据操纵语句");
本章总共将介绍连接数据库的三大基本格式。
格式一的特点是:
RecordSet对象是利用Connection对象的Execute方法建立的,建立的rs对象的指针只能向后,不能向前移动。
第一步建立了Connection对象的一个实例,第二步利用Open方法和用Access数据驱动程序打开服务器上的某个Access数据库,第三步执行SQL语句。
程序7-01.asp中利用conn的Open方法打开当前目录下的person.mdb文件,然后执行一个SQL语句“Select*fromgrade”,其中*表示所有列,grade是数据库表名。
“rs.Fields.Count”返回数据库表的列数。
7.2.2向浏览器输出数据库内容
已经成功地向浏览器输出了表头后,再输出内容就比较容易,如程序7-02.asp所示。
案例名称:
输出第一条记录
程序名称:
7-02.asp
<%@Language=Jscript%>
- "+rs(i).Name+"="+rs(i));
<%
varconn=Server.CreateObject("ADODB.Connection");
conn.Open("driver={MicrosoftAccessDriver(*.mdb)};dbq="+
Server.MapPath("person.mdb"));
rs=conn.Execute("select*fromgrade");
for(i=0;i { Response.Write("
}
conn.close();
%>
显示的内容如图7-7所示。
到此必须建立一个概念:
RecordSet对象有一个无形的指针。
关系型数据库表是一张二维表,每一行代表一个实体的信息。
RecordSet指针可以指向不同的行,当数据库第一次打开时,这个指针定位在第一行,当需要向后移动的时候,可以用movenext()来移动这个指针。
这时已经实现向浏览器输出数据库表的第一条内容。
图7-7输出第一行
7.2.3以表格的形式输出
下面用一个循环输出数据库中所有的数据,遇到一个陌生的语法是:
rs.movenext()。
当数据库打开时,rs对象定位在数据库表的第一条记录上,输出第一条记录的内容;要想输出第二条记录,必须执行rs.movenext()指令,让它移动到下一条记录。
其次还要介绍的语法是:
rs.Bof(BeginofFile:
文件开头)和rs.Eof(endofFile:
文件结尾),这两条指令判断记录指针是否移动最前面和最后面,理解它的一个关键的地方是:
Bof的位置是在第一条记录之前,Eof是在最后一条记录之后。
如果rs指针在最后一条记录上,再执行一次movenext时,rs.Eof为真。
一般不能让rs.Eof或者rs.Bof为真,因为这时,读取数据会出错。
案例名称:
以表格的形式输出
程序名称:
7-03.asp
<%@Language=Jscript%>
<%
varconn=Server.CreateObject("ADODB.Connection");
conn.Open("driver={MicrosoftAccessDriver(*.mdb)};dbq="+
Server.MapPath("person.mdb"));
rs=conn.Execute("Select*fromgrade");
Response.write("
Response.write("
//输出表头
for(i=0;i { Response.Write(""+rs(i).Name+" ");
}
Response.write("
//输出表内容
while(!
rs.Eof)
{
Response.write("
for(i=0;i { Response.Write(""+rs(i)+" ");
}
Response.write("
rs.movenext();
}
Response.write("");
conn.close();
%>
执行上面的程序,程序以表格的形式输出到浏览器上,程序实现一个循环将所有的数据都显示出来,每次循环让RecordSet对象向下移动一次,直到移动到最后一条记录为止,所以显示出来的是全部数据,而且以表格的形式输出到浏览器上,如图7-8所示。
图7-8表格输出
可以将输出的程序写成一个子过程的形式,便于以后的调用。
案例名称:
编写输出函数
程序名称:
7-04.asp
<%@Language=Jscript%>
<%
varconn=Server.CreateObject("ADODB.Connection");
conn.Open("driver={MicrosoftAccessDriver(*.mdb)};dbq="+
Server.MapPath("person.mdb"));
rs=conn.Execute("Select*fromgrade");
rstotab(rs);
conn.close();
%>
<%
functionrstotab(rs)
{
Response.write("
Response.write("
//输出表头
for(i=0;i { Response.Write(""+rs(i).Name+" ");
}
Response.write("
//输出表内容
while(!
rs.Eof)
{
Response.write("
for(i=0;i { Response.Write(""+rs(i)+" ");
}
Response.write("
rs.movenext();
}
Response.write("");
}
%>
显示的结果依然将所有记录输出来。
当要向浏览器输出信息时,只要包含这个函数然后调用函数就可以了,可以提高编程效率。
7.3使用SQL语句
SQL语句主要包括数据查询语言(DataQueryLanguage,DQL)和数据操作语言(DataManipulationLanguage,DML)。
首先介绍DQL的使用方法。
7.3.1Select的三大基本格式
1.基本句型一:
(最简单的select语句)
Select字段名From数据表
测试句型如下。
(1)Select*Fromgrade
功能说明:
将grade表中的所有字段取出来。
(2)Select学号,姓名fromgrade
功能说明:
将grade表中学号和姓名字段取出来。
(3)Select学号,姓名,语文+数学+英语as总成绩fromgrade
功能说明:
将grade表中的学号和姓名取出来,并将语文、数学和英语成绩相加产生虚拟列总成绩。
2.基本句型二:
(使用条件查询)
Select字段名From数据表where筛选条件
测试句型如下。
(1)Select*fromgradewhere数学>60
功能说明:
把所有数学成绩大于60分的记录选出来。
(2)Select*fromgradewhere数学=300or语文=300
功能说明:
把数学成绩等于300分或者语文成绩等于300分的人选出来。
3.基本句型三:
(进行排序)
Select字段名From数据表Orderby字段名
测试句型如下。
(1)Select*fromgradeorderby数学注:
从低到高排序
功能说明:
从grade表中取出所有字段,并按数学成绩排序。
(2)Select*fromgradeorderby数学,语文
功能说明:
从grade表中取出所有字段,并按数学成绩排序,如果数学成绩相同则按照语文成绩排序。
(3)Select*fromgradeorderby数学desc注:
从高到低排序
功能说明:
从grade表中取出所有字段,并按数学成绩倒序。
(4)Selecttop5*from成绩单
功能说明:
从grade表中取出前五条记录的所有字段。
测试上面的SQL语句,如程序7-05.asp所示。
案例名称:
测试SQL语句
程序名称:
7-05.asp
<%@Language=Jscript%>
<%
varSQL="";
if(Request("SQL").Count>0)
{
varconn=Server.CreateObject("ADODB.Connection");
conn.Open("driver={MicrosoftAccessDriver(*.mdb)};dbq="+
Server.MapPath("person.mdb"));
SQL=Request("SQL")
(1);
rs=conn.Execute(SQL);
rstotab(rs);
conn.close();
}
%>
<%
functionrstotab(rs)
{
Response.write("
Response.write("
//输出表头
for(i=0;i { Response.Write(""+rs(i).Name+" ");
}
Response.write("
//输出表内容
while(!
rs.Eof)
{
Response.write("
for(i=0;i { Response.Write(""+rs(i)+" ");
}
Response.write("
rs.movenext();
}
Response.write("");
}
%>
指令:
程序显示的结果如图7-9所示。 图7-9SQL语句测试结果 可以在文本框内输入测试的Select语句。 7.3.2Like子句 在实际应用系统中,模糊查询用得比较多,比如在一些网站上经常会提供按照关键字查询,可以利用Select语句的Like子句方便地实现模糊查询。 首先分析一下Like字句的使用方法。 (1)基本格式一: “_”匹配。 说明: 每个下划线匹配一个任意字符,注意只匹配一个字符。 比如: 姓名like'_敏',匹配姓名以“敏”字结尾且字数等于二的所有数据记录,如: “张敏”。 (2)基本格式二: “%”匹配。 比如: 姓名Like'%敏%',匹配姓名中出现“敏”的所有数据记录,如: “周惠敏”,“于敏”、“敏大”、“敏二”等。 有了这个基础,就可以利用Like字句来实现网站的模糊查询系统了,比如要在数据库中查询姓江的人,只要利用一条SQL语句就可以了。 Select*from数据库表where姓名Like'江%' 案例7-1: 模糊查询系统 本案例实现了网站的查询系统,当用户输入姓名的关键字的时候,系统就会从数据库中自动将所有的符合姓名中有这个字的人都显示出来,如程序mh.asp所示。 案例名称: 模糊查询系统 程序名称: mb.asp <%@Language=Jscript%>
<%
varKey="";
if(Request("keywords").Count>0)
{
varconn=Server.CreateObject("ADODB.Connection");
conn.Open("driver={MicrosoftAccessDriver(*.mdb)};dbq="+
Server.MapPath("person.mdb"));
Key=Request("keywords")
(1);
SQL="Select*fromgradewhere姓名like'%"+Key+"%'"
Response.Write(SQL);
rs=conn.Execute(SQL);
rstotab(rs);
conn.close();
}
%>
<%
functionrstotab(rs)
{
Response.write("
Response.write("
//输出表头
for(i=0;i { Response.Write(""+rs(i).Name+" ");
}
Response.write("
//输出表内容
while(!
rs.Eof)
{
Response.write("
for(i=0;i { Response.Write(""+rs(i)+" ");
}
Response.write("
rs.movenext();
}
Response.write("");
}
%>
输入姓名关键字:
程序中最关键的是如何将变量加到SQL语句中去。 “SQL="Select*fromgradewhere姓名like'%"+Key+"%'"”语句中Key是变量,要得到正确的格式只要按照下面的两个步骤进行操作。 (1)写出正确的SQL语句,SQL="Select*fromgradewhere姓名like'%敏%'",因为姓名是文本型变量,所以必须加上单引号,在SQL语句中,用单引号表示字符型变量。 (2)确定要替换的变量,这里是要将“敏”替换成变量Key。 替换的规则是: 删除“敏”字,在原字符串“敏”的位置,首先加上两个双引号,然后在两个双引号之间加上两个加号,最后将变量加到两个加号中间。 按照两个步骤,首先删除敏字,加上两个引号得到“"Select*fromgradewhere姓名like'%""%'"”,然后在刚才加的两个双引号之间加上两个加号,得到“"Select*fromgradewhere姓名like'%"++"%'"”,最后再将变量加到两个加号之间,得到“"Select*fromgradewhere姓名like'%"+Key+"%'"”。 可以看出按照这两个步骤写出的SQL语句和程序中一样,是正确的。 程序执行的结果如图7-10所示。 图7-10模糊查询结果 7.3.3使用SQL语句操作数据库 基本SQL语言分成三大体系。 (1)数据定义语言DDL: 用来定义数据。 (2)数据查询语言DQL: 数据检索语言。 (3)数据操作语言DML: 包括INSERT语句、UPDATE语句和DELETE语句。 SQL语言的基本操作如下。 (1)DELETE指令: 删除数据记录。 基本语法: DELETEFROM数据表WHERE条件 例: deletefromgradewhere数学=0 说明: 删除所有数学成绩为零的记录 (2)UPDATE指令: 更新数据记录。 基本语法: UPDATE数据表SET字段值=新值where条件 例1
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第7章 ADO数据访问接口 ADO 数据 访问 接口