WEB开发技术 第二阶段学习指导
4,5,6章总结 分析 提高
From,吴教育
Email,wujiaoyu@21cn.com
Q Q,188128997
目标
? 学习文件系统组件及文件超链接组件的使

? 理清在 ASP中利用 recordset对象实现分页
显示的方法
? 学习在 ASP中利用 command对象调用存储
过程的方法及 parameter对象的使用
? 操作 XML文件中的数据
File Access 组件
? 处理文件时可以使用文件访问组件( File
Access组件)。
? File Access组件用到下列对象:
– FileSystemObject:包含了处理文件系统的所
有基本方法。
– TextStream:用来读写文本文件。
– File:此对象的方法和属性用于处理单个文件 。
– Folder:此对象的方法和属性用于处理文件夹。
– Drive:表示磁盘驱动器或网络共享。
File Access组件有 3个集合
? File Access组件有 3个集:
– Files集,代表在文件夹中的一系列文件。
– Folder集,代表在文件夹中的各子文件夹。
– Drive集,代表服务器上的驱动器或远程网络
共享。
FileSystemObject 对象
? ASP 提供了几个用于操纵驱动器、文件夹
和文件的对象。 FileSystemObject 对象用
于访问服务器上的文件系统。
? 此对象可操纵文件、文件夹和目录路径。
? 还可使用此对象来检索文件系统信息。
<%
path=server.mappath("/")
filename=path&"/"&"test.txt"
set fso=server.createobject("scripting.filesystemobject")
set myfile=fso.createtextfile(filename)
myfile.writeline("you are welcome")
myfile.close
%>
驱动器和文件夹的操作
? FileSystemObject对象的 Drive集包含了服务器上
所有驱动器的集合。关于驱动器的
FileSystemObject对象的方法:
方法 描述
DriveExists(DriveSpecifier) 指定的驱动器是否存在。若返回值为 TRUE,
则表示指定的驱动器存在。
Drives 返回本机上的驱动器集合。
GetDrive(DriveSpecifier) 返回指定驱动器的 Drive对象。
GetDriveName(Path) 返回指定路径的驱动器的字符串。
LyfUpload组件
? LyfUpload组件,是一个免费的组件,遵从 RFC-1867
HTTP标准,可以在 ASP页面中接收用户端使用
entype=“multipart/form-data”的 Form上传的文件。
? LyfUpload组件 使用方法
– 先下载 lyfupload.dll外部组件
– 将它 (lyfupload.dll)放在 winnt/system32目录
– 然后注册,regsvr32 lyfupload.dll
– 就可以和其它组件一样使用了
? 语法
– Set 对象名 =Server.CreateObject(“LyfUpload.UploadFile”)
文件上传示例 1
<form method="POST" enctype="multipart/form-data"
action="fileupload.asp">
<p>文本框 1,<input type="text" name="text1"
size="20"><br>
选择文件,<input type="file" name="file1"><br>
<input type="submit" value="上载 "
style="background-color,rgb(0,0,255); color,
rgb(255,255,0)"> </p>
</form>
? Enctype的缺省值为:,application/x-www-form-
urlencoded”
文件上传示例 2
<%@Language=VBScript CODEPAGE=932 %>
<HTML>
<BODY>
<%
Set obj = Server.CreateObject("LyfUpload.UploadFile")
txt = obj.request("text1") '得到 form元素的值
Response.Write( "文本框输入值是,"&txt)
Response.Write "<br>"
ss=obj.SaveFile("file1","C:\temp",true) '保存文件到服务器
aa=obj.filetype("file1")
if ss<> "" then
Response.Write "选择的文件已经上载到服务器! <br>"
Response.Write("文件名," & ss)
Response.Write("<br>Content-Type," & aa) '得到 Content-Type
end if
%>
</BODY >
</html>
W3 Jmail组件
? W3Jmail 是一个 SMTP组件,利用它可以发送文本格式和 HTML格式
的邮件,使用 w3 JMail 可以在 asp应用里面发送电子邮件。
? 下载地址,http://download.dimac.net/jmail/jmail.exe
? 执行 jmail.exe自动注册
? 就可以和其它组件一样使用了
? 语法
– Set 对象名 =Server.CreateObject(“jmail.smtpmail”)
文件超链接组件
? 用来建立易于维护的索引站点
? 文件超链接组件使用方法
(1) 建立超链接 数据文件, *.txt
(2) 建立显示链接的页面,*.asp
? 语法:
– Set 对象名 =Server.CreateObject(“MSWC.nextlink”)
? 文件超链接组件的方法
文件超链接组件
<%
TheSubj=Server.HTMLEncode(Request.Form("subject"))
If TheSubj ="" THEN TheSubj="无标题 "
ThePost="<HTML><HEAD><TITLE>"&TheSubj&"</TITLE></HEAD><BODY>"
ThePost=ThePost&"发表日期,"&NOW&"<Hr>"
ThePost=ThePost&Server.HTMLEncode(Request.Form("Posting"))
ThePost=ThePost&"<!-- #INCLUDE file=""news.inc"" -->"
ThePost=ThePost&"</BODY></HTML>"
Set mylinks=Server.CreateObject("MSWC.NextLink")
TheName="item"&mylinks.GetlistCount("news.txt")+1&".asp"
TheNamePath=Server.Mappath(TheName)
response.write thnamepath
Set MyFileObj=Server.CreateObject("Scripting.FileSystemObject")
Set MyOutStream=MyFileObj.CreateTextFile(TheNamePath)
MyOutStream.Write ThePost
MyOutStream.Close
TheNews=Server.MapPath("news.txt")
Set MyNews=MyFileObj.OpenTextFile(TheNews,8,TRUE)
MyNews.WriteLine TheName&vbTab&TheSubj
MyNews.Close
%>
建立超链接数据文件 (link.txt)的注意事项
? 每行只写一个链接地址及其描述,它们之
间用 TAB键分开
? 链接地址可以是完整的网址或相对路径
? 链接地址前不要加上 http://
ADO 对象模型
Connection
Command
Recordset
Field
Error
Property
Parameter
Property
Property
Property
connection对象作用
? 一般用来与数据库建立连接
? 也可用来查询、添加、删除或修改数据库
中的记录
? 还可用来进行事务处理
? 建立 connection对象语法
– Set 对象名
=server.createobject(“adodb.connection”)
利用 OPEN方法建立与数据库的连接
? 语法:
– connection对象名,open,参数 1=value1;参数
2=value2;……”
常见参数如下
参数 说明
User 数据库登录账号
Password 数据库登录密码
Dsn Odbc数据源名
driver 数据库驱动类型
dbq 数据库文件
provider 数据提供者
Data source 数据库文件
利用 OPEN方法建立与数据库的连接
<%
Set conn = Server.CreateObject("ADODB.Connection")
conn.Open "driver={Microsoft Access Driver (*.mdb)};dbq="
& Server.MapPath("db1.mdb")
Set rs = conn.Execute( "select * from score" )
%>
利用 execute方法执行各种 sql语句
? 语法,conn.execute commandtext,recordsaffected,options
– Commandtext是操作字符串,可为 sql语句、表名、存储过程等
– Recordsaffected是可选参数,返回此操作所影响的记录数目
– Options可选参数,指示 commandtext参数的类型信息,如下表所示
adcmdtext 说明 commandtext为 SQL命令
adcmdtable 说明 commandtext为一个表名
adcmdstoredpr
oc
说明 commandtext为存储过程
adcmdunknow
n
说明 commandtext为未知类型
-----
利用 connection对象 进行事务处理
? 事务处理的功能
– 将多个逻辑上关联的处理步骤作为一个整体,要么都
成功,要么都不成功,以保证数据的一致性
? Connection对象中关于事务处理的方法:
– BeginTrans 开始一个新事务,在调用 CommitTrans
和 RollbackTrans 前不会提交任何更改。
– CommitTrans 更改至数据库,并结束当前事务。
– RollbackTrans 取消当前事务中所做的更改,并结束
当前事务。
利用 connection对象 进行事务处理
<%
On Error Resume Next '如果发生错误,跳过执行下一句
'连接数据库,建立 Connection对象
Dim db,strConn
strConn="Dbq=" & Server.Mappath("address.mdb") & ";Driver={Microsoft Access Driver (*.mdb)}"
Set db=Server.CreateObject("ADODB.Connection")
db.Open strConn
db.BeginTrans '开始事务处理
'删除记录
strSql="Delete From users Where name='李玫 '"
db.Execute(strSql)
'添加记录
strSql="Insert Into users(name,tel,email) Values('李玫 ','9999999','limei@263.net')"
db.Execute(strSql)
If db.Errors.Count=0 Then '如果无错误,就执行
Db.CommitTrans '提交事务处理结果
Response.Write "成功执行 "
Else
Db.RollbackTrans '如果有错误,则取消事务处理结果
Response.Write "有错误发生,取消处理结果 "
End If
%>
Errors集合的属性和方法
? 属性
– Count 返回集合中错误的个数。
如,Connection对象,Errors.Count
? 方法
– Item 用来返回一个错误对象,
如,Set Error对象 = Connection对象,Errors.Item(错误索
引值 )
– Clear 清除集合中的所有错误,
如,Connection对象,Errors.Clear
Error对象
<%
Dim db,rs,strSql
On Error Resume Next '请注意这句话,发生错误后,继续执行下一句
'建立 Connection对象
Set db=Server.CreateObject("ADODB.Connection")
db.Open "Dsn=addr2" '故意给一个错误的数据源
'用一个循环将所有错误信息输出
Dim I,err
For I =0 To db.Errors.Count-1 '循环输出所有的错误对象
Set err=db.Errors.Item(I) '建立 Error对象 err
Response.Write "错误编号," & err.Number & "<br>"
Response.Write "错误描述," & err.Description & "<br>"
Response.Write "错误原因," & err.Source & "<br>"
Response.Write "提示文字," & err.HelpContext & "<br>"
Response.Write "帮助文件," & err.HelpFile & "<br>"
Response.Write "原始错误," & err.NativeError & "<br>"
Next
%>
recordset对象
? 记录集是就象是一个二维的电子表格,每行是一
个记录,每个记录可分为多个列 (字段,也称为域 )
? 记录指针所指向的记录为当前记录,缺省情况下
对记录集所做的操作是对当前记录进行的
? 利用它就可对记录进行相应处理,包括显示、添
加、删除、更新记录等。
用来实现数据记录分页显示的属性
? Pagesize
? Pagecount
? Absolutepage
? Absoluteposition
说明:
? 当给 Absoluteposition赋值时,记录指针就会定位的相应
的记录位置上,使该记录成为当前记录。
? 当程序使用 Absolutepage时,系统将对数据记录进行分页,
默认每页为 10条记录,Absolutepage赋值为几,记录指
针就自动定位到第几页的第一条记录上。
? Absoluteposition=(Absolutepage-1)* Pagesize+页内位置
实现数据记录分页显示
<%
Dim db,rs,strSql
'建立 Connection对象
Set db=Server.CreateObject("ADODB.Connection")
db.Open "driver={Microsoft Access Driver (*.mdb)};dbq=" & Server.MapPath("address.mdb")
'这里利用数据源连接
'建立 Recordset对象
Set rs=Server.CreateObject("ADODB.Recordset")
strSql ="Select * From users"
rs.Open strSql,db,1 '注意参数设置
'如果记录集不是空的,就执行分页显示
If Not rs.Bof And Not rs.Eof Then
'-------------------------------------------------------------------------------
'下面一段判断当前显示第几页,如是第一次打开,为 1,否则由传回参数决定
Dim page_no
If Request.QueryString("page_no")="" Then
page_no=1
Else
page_no=Cint(Request.QueryString("page_no")) '用 Cint将字符串变为整数
End If
'-------------------------------------------------------------------------------
'下面一段开始分页显示,指向要显示的页,然后逐条显示当前页的所有记录。
rs.PageSize=2
实现数据记录分页显示 (续 )
rs.AbsolutePage=page_no '设置当前显示第几页
Dim I '该变量用来控制显示当前页记录
I=rs.PageSize
Do While Not rs.Eof And I>0 '循环直到当前页结束或记录集结尾
I=I-1
Response.Write rs("name") &" "& rs("tel") &"<br>" '输出姓名字段值
rs.MoveNext
Loop
'-------------------------------------------------------------------------------
'下面一段在下方显示页数信息,从 1到总页数循环,如不是当前页,就加上超链接
Response.Write "请选择数据页, "
For I=1 To rs.PageCount
If I=page_no Then '如是当前页,就不加超链接
Response.Write I & "&nbsp"
Else '如不是当前页,就加上超链接
Response.Write "<a href='5-3-3.asp?page_no=" & I & "'>" & I & "</a>&nbsp"
End If
Next
Else
Response.Write "该记录集为空 "
End If
'关闭对象就省略了
%>
Fields 集合的属性和方法
? 属性
– Count 返回记录集中字段个数
? 方法
– Item 返回一个字段对象,语法如下:
? Set Field对象 =Recordset对象,Fields.Item(字段名或
字段索引值 )
– 也可以简写为
? Set Field对象 =Recordset对象 (字段名或字段索引
值 )
Field对象的属性
属 性 说 明
Name 字段名称
Value 字段值, 这是最常用的
Type 字段数据类型
DefinedSize 字段长度
Precision 字段存放数字最大位数
NumericScale 字段存放数字最大值
ActualSize 字段数据值长度
Attributes 字段数据值属性
Command对象
? Command对象是介于 Connection对象和 Recordset对象之
间的一个对象,主要用来传递 SQL指令,对数据库提出操
作请求,把得到的结果返给 Recordset对象。
? Command对象依赖 Connection对象,因为 Command对
象必须经过一个已经建立的 Connection对象才能发出 SQL
指令。
? 实际开发时常常省略了 Command对象,但是其实也隐含
建立了该对象。
? 建立 command对象语法:
Set command对象名 =server.createobject(“adodb.command”)
调用 SQL Server的存储过程
存储过程是大型数据库的一个重要概念。
存储过程( Stored Procedure)有时也称为存
储查询( Stored Query),是存储在数据库
中的一组预先定义的 SQL语句集合,在存储
过程中不仅可以包括标准的 SQL语句,还可
以包含输入和输出参数。
调用 SQL Server的存储过程
<!--#INCLUDE file="ADOVBS.inc"-->
<%
uid=request.form("uid")
pwd=request.form("pwd")
%>
<%'=uid%>
<%
Set MyConn=Server.CreateObject("ADODB.Connection")
Set MyCommand=Server.CreateObject("ADODB.Command")
connstr="driver={SQL Server};database=db;server=127.0.0.1;uid=gfg;pwd=gfg"
MyConn.Open connstr
'MyConn.Open "user","sa",""
Set MyCommand.ActiveConnection=MyConn
MyCommand.CommandType=adCMdStoredProc
MyCommand.CommandText="user_login"
Set
MyParam=Mycommand.CreateParameter("myreturnvalue",adInteger,adParamReturn
Value)
调用 SQL Server的存储过程
MyCommand.Parameters.Append MyParam
Set MyParam=Mycommand.CreateParameter("uid",advarchar,adParaminput,30)
MyCommand.Parameters.Append MyParam
Set MyParam=Mycommand.CreateParameter("pwd",advarchar,adParaminput,30)
MyCommand.Parameters.Append MyParam
mycommand("uid")=uid
mycommand("pwd")=pwd
MyCommand.Execute
%><%="返回值是,"%>
<%=MyCommand("myreturnvalue")%>
<%
if mycommand("myreturnvalue")=1 then
response.write "<br>登录成功 "
else
response.write "<br>登录失败 "
end if
MyConn.Close
%>
Parameters集合的属性和方法
? 属性
– Count 返回参数集合中的参数对象个数,
– 如,cmd.Parameters.Count
? 方法
– Append 添加一个参数对象
– Delete 删除一个参数对象
– Item 返回一个参数对象
– Refresh 刷新 Parameters集合中的参数对象。
建立 Parameter对象
? 语法如下:
– Set Parameter对象实例 =Command对
象,CreateParameter(name,type,direction,size,value)
? 说明
– Name 参数名称
– Type 参数类型,参见下表
– Direction 参数方向,参见下表
– Size 参数大小,一般可以省略
– Value 参数的值
? 具体示例参看前面讲的 9-6.asp。
Parameter对象的属性和方法
? 属性
– Name,Type,Direction,Size,Value和
Attributes
– 和 CreateParameter方法的几个参数类似。
? 方法
– AppendChunk 该方法用于添加数据到
Parameter对象的末尾。
XML文档
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="show_book.xsl"?>
<!DOCTYPE catalog SYSTEM "catalog.dtd">
<!- - catalog last updated 2000-11-01 - ->
<catalog xmlns="http://www.example.com/catalog/">
<book id="bk101">
<author>Abercrombie,Kim</author>
<title>XML Developer's Guide</title>
<genre>Computer</genre>
<price>44.95</price>
<publish_date>2000-10-01</publish_date>
<description><![CDATA[An in-depth look at
creating applications with XML,using <,>,]]> and
&amp;.</description>
</book>
<book id="bk109">
<author>Kress,Peter</author>
<title>Paradox Lost</title>
<genre>Science Fiction</genre>
<price>6.95</price>
<publish_date>2000-11-02</publish_date>
<description>After an inadvertent trip through a
Heisenberg,.....................</description>
</book>
</catalog>
序言
文档
元素
根元素 属性
元素
注释
文档
类型
定义
XML声明
文本
XML组件
? 创建 COMDocument对象
? 语法
– Set 对象名 =server.createobject(“msxml.domdocument”)
? 数据岛技术
总结
? 本次课对第四、五、六章的主要知识点进
行了一个回顾
? 课后练习:
通过在线练习系统,完成综合测试部分练