一  ASP内部组件概述

  • ASP内置了许多功能强大的ActiveX组件,利用这些组件可以完成数据库存取、文件存储等功能
  • 数据库存储组件(Database Access Component):用来存储数据库
  • 文件存储组件(File Access Component):存储文件,提供文件的输入输出方法
  • 广告轮显组件(Ad Rotator Component):用来构建广告页面
  • 浏览兼容组件(Browser Capabilties Component)获取客户端浏览器类型等信息
  • 文件超链接组件(Content Linking component):用来建立相书本目录一样的超链接web页面
  • 计数器组件(Page Counter):用来统计网页访问次数

二 数据库存储组件(Database Access Component)

使用ADO(ActiveX Data Object)技术来存取符合ODBC(Open DataBASE Connectivity)标准的数据库或具有表格状的数据形式(如Excel)

 

ADO的三个主要对象

  • Connection:连接数据库对象           作用:负责建立与数据库的连接
  • Command:数据库命令对象          作用:负责执行对数据库的操作
  • Recordset:记录集对象                 作用:返回查询到的记录

使用Connection对象连接数据库的三种方式

基于ODBC数据源的连接

<%
Dim conn
Set conn=Server.CreateObject("ADODB.Connection")
conn.Open"Dsn=address"
rem 连接数据库字符串可以省略"Dsn",因此最后一句可以写成
rem conn.Open"address"
%>

基于ODBC,但不用数据源的连接

<%

dim conn
set conn = Server.CreateObject("ADODB.Connection")
conn.Open"Driver={Microsoft Access Driver(*.mdb)};Dbq=C:\asp\project05\address.mdb"
rem 利用Server对象的MapPath方法将相对路径转换为物理路径
rem conn.Open"Driver={Microsoft Access Driver(*.mdb)};Dbq="&Server.MapPath("address.mdb")
%>

基于OLE DB的连接方式

<%
Dim conn
set conn=Server.CreateObject("ADODB.Connection")
conn.Open"Provider=Microsoft.Jet.OLEDB.4.0;DataSource=D:\asp\project05\address.mdb"
rem 使用Server.MapPath方法将相对路径转换为物理路径
rem conn.Open"Provider=Microsoft.Jet.OLEDB.4.0;DataSource="&Server.Mappath("address.mdb")

%>

利用select查询记录(把记录显示到页面上)

 利用select查询记录并把记录显示到页面上的流程:

(1)利用Connection对象连接数据库

(2)利用Connection对象的Execute方法执行一条select语句,该方法返回一个记录集对象(recordset)

        记录集:类似于数据库中的一个表,由若干列和若干行组成,可以看成一个虚拟表

(3)在记录集中利用循环移动指针依次读取所用记录

实例:

<%@Language="Vbscript" codepage="65001"%>
<%option Explicit%>
<html>
<head>
<title>连接数据库练习</title>
<meta http-equiv="Content-Type" Content="text/html;charset=utf-8"/>

</head>
<body>
<h2 align="center">我的通讯录</h2>
<%
rem 建立连接
Dim conn
Set conn=Server.CreateObject("ADODB.Connect")
conn.Open"address"   rem利用数据源连接数据库
rem 定义一个rs接收结果集
Dim rs
Set rs=conn.Execute("Select * From tbAddress") rem返回整个数据表
rem 利用表格显示记录集中的记录
%>
<table border="1" width="100%" align="center">
<tr>
<th>姓名</th>
<th>性别</th>
<th>年龄</th>
<th>电话</th>
<th>E-mail</th>
<th>简介</th>
<th>添加日期</th>
</tr>
<%Do while Not rs.Eof rem只要不是结尾就执行循环%>
<tr>
<td><%=rs("strName")%></td>
<td><%=rs("strSex")%></td>
<td><%=rs("intAge")%></td>
<td><%=rs("strTel")%></td>
<td><a href="mailto:<%rs("strEmail")%>"><%=rs("strEmail")%></a></td>
<td><%=rs("strIntro")%></td>
<td><%=rs("dtmSubmit")%></td>
</tr>
<%
rs.MoveNext  rem 将记录指针移动到下一条记录
Loop
%>
</table>
</body>
</html>

利用insert语句添加记录

利用insert语句添加记录到页面上的流程

(1)利用Connection对象连接数据库

(2)利用Connection对象的Execute方法执行一条insert语句,就可以完成在数据库中添加一条记录

实例:

<%@Language="Vbscript" codepage="65001"%>
<%option Explicit%>
<html>
<head>
<title></title>
<meta http-equiv="Content-Type" Content="text/html;charset=utf-8"/>
</head>
<body>

<%
rem 建立连接,Connection对象实例conn
Dim conn
Set conn=Server.CreateObject("ADODB.Connction")
conn.Open "address"
rem 利用Connection对象的Execute方法添加新的记录
conn.Execute("insert into tbAddress(strName,strSex,intAge,strTel,strEmail,strIntro,dtmStbmit) values('梦梦','女','22','625879','mm@445.com','金融系','#2018-8-8#')")
Response.write("操作成功,打开address.mdb查看")
%>

</body>
</html>

 

利用delete语句删除记录

实现删除记录的流程:

同样利用connection对象Execute方法完成,但不要反会记录集

实例:

<%@Language="Vbscript" codepage="65001"%>
<%option Explicit%>
<html>
<head>
<title></title>
<meta http-equiv="Content-Type" Content="text/html;charset=utf-8"/>
</head>
<body>

<%
rem 利用Connection对象实例conn,建立连接
Dim conn 
set conn=Server.CreateObject("ADODB.Connection")
Conn.Open"address"
rem 利用Connection对象的Execute方法删除记录
conn.Execute("Delete From tbAdress where ID=1")
Response.write("操作成功,记录已删除,可以打开address.mdb查看结果")
%>

</body>
</html>

 

利用update语句更新记录

实现更新记录的流程:

利用Connection对象的Execute方法,无需返回记录集

简单的实例:

<%@Language="Vbscript" codepage="65001"%>
<%option Explicit%>
<html>
<head>
<title></title>
<meta http-equiv="Content-Type" Content="text/html;charset=utf-8"/>
</head>
<body>

<%
rem 建立连接
Set conn=Server.CreateObject("ADODB.Connection")
Conn.Open "address"
rem 利用Connection对象的Execute方法更新记录
conn.Execute("Update tbAddress set intAge=22,strTel='524987' where ID=2")
response.write("操作成功,可以打开address.mdb查看结果")
%>

</body>
</html>

复杂的更新(update)实例:

update_from.asp文件

<%@Language="Vbscript" codepage="65001"%>
<%option Explicit%>
<html>
<head>
<title></title>
<meta http-equiv="Content-Type" Content="text/html;charset=utf-8"/>
</head>
<body>
<h2 align="center">复杂的Update练习</h2>
<%
rem 建立连接
Dim conn,strConn
Set conn=Server.CreateObject("ADODB.Connection")
strConn="Provider=Microsoft.jet.OLEDB.4.0;Data Source"& server.Mappath("address.mdb")
conn.Open strConn
rem 记录集实例,
Dim strSql,rs
strSql="select * From tbAddress where ID="&Request.QueryString("ID")
Set rs=conn.Execute(strSql)
rem 记录的数据在表单中显示
%>
<form name="frmUpdate" method="post" action="update.asp">
<table border="1" width="80%" align="center">
<tr>
<td>姓名</td>
<td><input type="text" name="txtname" size="20" value="<%=rs("strName")%>" /></td>
</tr><tr>
<td>性别</td>
<td>
<input type="radio" name="rdoSex" value="男"<%if rs("strSex")="男"
Then Response.write"checked"%>>男
<input type="radio" name="rdoSex" value="女"<%if rs("strSex")="女"
Then Response.write"checked"%>>女</td>
</tr><tr>
<td>年龄</td>
<td><input type="text" name="txtAge" size="4" value="<%=rs("intAge")%>"></td>
</tr><tr>
<td>电话</td>
<td><input type="text" name="txtTel" size="20" value="<%=rs("strTel")%>"></td>
</tr><tr>
<td>E-mail</td>
<td><input type="text" name="txtEmail" size="50" value="<%=rs("strEmail")%>"></td>
</tr><tr>
<td>个人简介</td>
<td><textarea name="txtIntro" rows="4" cols="50"><%=rs("strIntro")%></textarea></td>
</tr><tr>
<td><input type="hidden" name="txtID" value="<%=rs("ID")%>"></td>
<td><input type="submit" name="btnSubmit" value="确定"></td>
</tr>
</table>

</form>
</body>
</html>

update.asp文件

<%@Language="Vbscript" codepage="65001"%>
<%option Explicit%>
<html>
<head>
<title></title>
<meta http-equiv="Content-Type" Content="text/html;charset=utf-8"/>
</head>
<body>
<h2 align="center">复杂的Update练习</h2>
<%
rem 只要有姓名和电话,就更新记录,否则给出错误信息
if Requset.Form("txtName")<>"" and request.Form("txtTel")<>"" Then
rem获取提交的表单数据
Dim ID,strName,strSex,intAge,strTel,strEmail,strIntro
rem 获取form表单传来的ID
ID = request.Form("strID")
rem获取姓名
strName=Requset.Form("strName")
rem获取性别
strSex=requst.Form("rdoSex")
rem获取年龄
if Requset.Form("txtAge")<>""Then
  intAge=Request.Form("txtAge")
  Else
  intAge=0
  End if
  strTel=Request.Form("txtTel")
  strEmail=Request.Form("rdoSex")
  strIntro=Request.Form("txtIntro")
rem建立连接
Dim conn,StrConn
Set conn=Server.CreateObject("ADODB.Connection)
strConn="Provider=Microsoft.Jet.OLEDB.4.0;Data Source="&Server.Mappath("address")
conn.Open strConn
rem利用Execute更新记录,注意更新条件为隐藏文本框传过来的ID值
dim strSql
strSql="Update tbAddress set strName'"&strName&"',strSex='"&strSex&"',IntAge='"&intAge&"',strTel='"&strTel&"',strEmail='"&strEmail&"',strIntro='"&strIntro&"' where ID"&ID
conn.Execute(strSql)
rem更新完成,重定向会首页
response.redirect"index.asp"
Else
response.write"姓名和电话必须填写"
response.write("<a href='index.asp'>重新编写</a>") 
end if
%>
</body>
</html>