一 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>