购买

¥30.0

加入VIP
  • 专属下载券
  • 上传内容扩展
  • 资料优先审核
  • 免费资料无限下载

上传资料

关闭

关闭

关闭

封号提示

内容

首页 ASP程序设计-第9章ADO组件和数据编程

ASP程序设计-第9章ADO组件和数据编程.ppt

ASP程序设计-第9章ADO组件和数据编程

烟雨梦兮
2018-10-14 0人阅读 举报 0 0 0 暂无简介

简介:本文档为《ASP程序设计-第9章ADO组件和数据编程ppt》,可适用于IT/计算机领域

第九章ADO组件和数据库编程本章导读:支持对数据库的访问和操作是ASP的一个重要功能也是ASP逐渐发展壮大的一个重要因素ASP程序通过ADO(ActivexDataObjectsActivex数据对象)组件技术实现与符合ODBC(OpenDatabaseConnectivity开放式数据库链接系统)标准规范的数据库进行连接并可很方便地通过浏览器存取、查询、操作数据库中的数据。知识要点:※ADO组件模型※Connection对象和数据库连接※Command对象和查询※Recordset对象和分页ADO技术简介ADO组件是微软公司开发的一种强大的数据库管理组件是ASP存取数据库的重要工具。利用它可以轻松的完成对各种数据库的查询、存储操作。ADO组件是一种基于Internet并且以数据为中心的数据访问接口这种数据访问接口与应用程序所使用的语言无关。ADO是对数据库进行操作的最有效的和最简单直接的方法它是一种功能强大的数据访问编程模式。ADO组件提供了个子对象和个数据集合利用这些子对象和数据集合可实现对数据库的访问和控制。ADO组件的对象ADO组件提供了个子对象各对象及其功能如表所示。表ADO组件的对象对象功能connection连接对象建立与数据库的连接command命令对象执行对数据库操作如查询、添加、删除、修改记录等命令recordset记录集对象表示从数据源返回的结果集field字段对象用来取得一个记录集(recordset)内全部字段的值parameter参数对象SQL存储过程或者有参数查询命令中一个参数property属性对象指明一个ADO对象的属性error错误对象用来返回一个数据库连接(connection)上的错误ADO组件的对象在这个对象之中其中最主要的对象是connection、command和recordset这个对象。它们在处理整个数据库的过程中既分工明确又协调合作同时功能上既相对独立也有互相交叉实际运行时各对象之间关系错综复杂。一般说来connection对象主要负责与数据库的连接形象地比喻成数据通道的维护者command对象负责数据的查询形象地比喻成数据的挖掘者recordset对象负责数据的收集整理发布形象地比喻成数据的发布者。。ADO组件的对象不考虑程序内部处理的机制时在数据从后台数据库传到前台网页的过程中他们的逻辑关系可以简化成一种直观入的学号是否存在Dimrs,strSqlstrSql="select*fromxsxxwhere学号='"parastuID"'"commCommandText=strSql'设置命令文本字符串commCommandType='指定命令类型Setrs=commExecute'返回记录集ifrsEofandrsbofthenResponseWrite"学号有误重新输入!"rscloseresponseEnd()endif‘更新记录dimrs,strsqlstrsql="updatexsxxset专业=where学号="'带参数查询的sql语句commcommandtext=strsql'设置命令文本字符串commcommandtype='指定命令类型'建立参数对象setprmsubname=commcreateparameter("专业",,,,parasubname)commparametersappendprmsubnamesetprmstuid=commcreateparameter("学号",,,,parastuid)commparametersappendprmstuidcommexecute>学号为【<=prmstuidvalue>】的同学:<br>你已经成功申请【<=prmsubnamevalue>】专业。<endif><body><html>运行结果如图所示。图【例】运行结果Recordset对象在创建web数据库应用程序的过程中一般是用conncetion对象建立数据库连接是用command对象执行数据库查询而用recordset对象来处理返回的数据。使用recordset对象之前必须建立其对象实例标准语法格式如下:格式:setrs=servercreatobject("adodbrecordset")说明:创建一个recordset对象实例使用时注意以下几点:⑴rs:表示创建的recordset对象实例名⑵recordset对象提供了丰富的方法来操作记录集常用的方法如表所示。表recordset对象的方法方法功能open必选方法打开记录集close关闭记录集requery重新打开记录集movefirst定位到第条记录movelast定位到最后一条记录moveprevious移动到上一条记录movenext最重要的方法移动到下一条记录moven,start向前向后移过n条记录n为正值向前移动n为负值向后移动start取从当前记录开始取从表头开始取从表尾开始表续getrows(n)读取n个记录到二维数组中第一维表示字段名(列)第二维表示字段值(行)n取时为全部记录find(查询条件,跳过记录行数,查询方向,开始位置)查询满足条件的单记录找到记录指针定位到该记录查询条件是逻辑表达式可包括模糊运算符查询方向是指向前向后搜索addnew字段名数组字段值数组在表尾添加一条新记录指针指向该记录缺省时添加一条空白记录delete删除当前记录update字段名数组字段值数组保存对当前记录所做的修改执行addnew和delete方法后除非执行移动了记录指针命令否则一般要求执行update才能更新数据库cancelupdate取消addnew和delete对当前记录所做的修改save文件名将记录集保存到文件中updatebatchaffectrecords保存对一个或多个记录的修改affectrecords表示批量更新的条件如表所示cancelbatch取消一批更新resyncaffectrecords更新当前记录集实现与数据源同步affectrecords取值及其含义如表所示表affectrecords取值及其含义⑶recordset对象也提供了丰富的属性来操作记录集常用的属性如表所示。类型数值功能adaffectcurrent只对当前记录做同步更新adaffectgroup对所有匹配于filter属性的记录行做同步更新adaffectall对所有recordset对象内的数据做同步更新表recordset对象的属性属性意义描述source指示数据的来源可以是一个command对象名、sql语句、表名或存储过程activeconnection指定当前的记录集对象属于哪个connection对象cursortype指定recordset对象所使用的指针类型取值及其含义如表所示locktype表示编辑时记录的锁定类型取值及其含义如表所示bof判断记录指针是否到了第一条记录之前eof判断记录指针是否到了最后一条记录之后pagesize指定recordset对象每一页显示的记录数,默认值为pagecount显示recordset对象包括多少“页”的数据absolutepage设定当前记录的位置是位于哪一页第一条记录上续absoluteposition当前记录的绝对位置maxrecords执行一个SQL查询时返回recordset对象的最大记录数maxrecords表示一个recordset对象在高速缓存中的记录数filter用来设定一个过滤条件以便对recordset记录进行过滤类似于SQL语句中where子句功能可以使用关系表达式也可以使用标准常数见表所示cursorlocation用于设置记录集是在服务器端还是客户端处理见表所示recordcount返回记录集对象中的记录总数须设置cursortype为或bookmark书签设置或返回当前记录的位置值state对象当前所处状态status对recordset对象进行批量更新后查询当前记录的状态sort排序editmode指示当前记录的编辑状态–已被编辑–已被修改而未提交–存入数据库的新记录表cursortype(指针)类型类型数值功能描述adopenforwardonly向前指针(默认值)只能利用movenext和getrows方法adopenkeyset键盘指针可以向前或向后移动。删除或更新了的记录会显示在他人客户端插入了的新记录不会在他人客户端adopendynamic动态指针可以向前或向后移动。所有改变(删除、更新、插入)的数据都会显示在他人客户端adopenstatic静态指针可以向前或向后移动。所有改变(删除、更新、插入)的数据都不会显示在他人客户端表locktype(锁定)方式类型数值功能描述adlockreadonly只读(默认值)不能改变数据。adlockpessimistic悲观锁定编辑修改记录时立即加锁同一时刻只能被一个用户编辑编辑完解锁adlockoptimistic乐观锁定编辑修改记录并未加锁只在调用update方法时才锁定记录adlockbatchoptimistic成批乐观锁定编辑修改记录并未加锁用于updatebatch方法数据处理位置必须设置aduserclientbatch模式时才允许做数据删除、更新、插入操作表filter(过滤)类型类型数值功能adfilternone清除以前的filter显示所有数据adfilterpendingrecords只显示经过修改但没有提交的数据adfilteraffectedrecords只显示最近修改的数据adfilterfetchedrecords只显示暂存于客户端缓存中的数据表cursorlocation类型⑷前面的介绍的adoconncetion对象的execute方法和adocommand的execute方法返回的查询结果也是自动创建隐式的recordset对象。类型数值功能aduserclient将服务器响应的数据下载到客户端缓存进行存取处理aduserserver维持服务器响应的数据在服务器端进行数据存取处理aduserclientbatch响应的数据动态成批返回给客户端处理并切断连接更新时自动连接记录集打开和Open方法当使用recordset显式建立记录集后还必须利用recordset对象的open方法打开记录集recordset对象。其语法格式如下:格式:rsopensource,activeconnection,cursortype,locktype,options说明:open方法提供了很多参数一般可以省略后面的三个参数省略中间参数时逗号要保留。各参数含义如下:⑴source:数据来源表示打开记录集后要执行的命令可以是一个command对象名、sql语句、数据库表或存储过程⑵activeconnection:数据库连接字符串指定记录集对象属于哪个connection对象⑶cursortype:指针类型表示recordset对象在打开数据库时使用的记录指针类型选不同的类型会影响recordset对象的各种属性和方法。取值及其含义如表所示。⑷locktype:锁定方式用于设置recordset对象的并发事件的控制处理方式确定是以只读的方式打开还是允许其它用户变更记录内容。另外还可以确定更新记录是以单条方式更新还是以成批方式更新。取值及其含义如表所示。⑸options:限定open方法中第一个参数source(数据来源)的类型其取值及其含义如表所示。表options类型数值功能描述adcmdunknown类型不确定(默认值)不能改变数据记录adcmdtext一般命令如sql查询字符串adcmdtable一个存在的表名称adcmdstoreproc一个存在的过程【例】:利用recordset对象显式创建和打开记录集的示例。<html><head><title>recordset对象显式创建和打开记录集的示例<title><head><body><'下面将建立连接数据库jxglmdb建立connection对象dimcnn,strconnsetcnn=servercreateobject("adodbconnection")strconn="dbq="servermappath("jxglmdb")"driver={microsoftaccessdriver(*mdb)}"cnnopenstrconndimrs,strsqlsetrs=servercreateobject("adodbrecordset")strsql="select*fromxsxx"rsopenstrsql,cnn'表示键盘指针可以向前向后移动><center><tableborder=""><tralign="center"><td>学号<td><td>专业<td><td>姓名<td><td>性别<td><td>出生日期<td><td>入学成绩<td><td>是否团员<td><td>籍贯<td><tr><dowhilenotrseof><tr><td><=rs("学号")><td><td><=rs("专业")><td><td><=rs("姓名")><td><td><=rs("性别")><td><td><=rs("出生日期")><td><td><=rs("入学成绩")><td><td><=rs("是否团员")><td><td><=rs("籍贯")><td><tr><rsmovenextloop><table><center><rsclose'关闭recorset对象setrs=nothingcnnclose'关闭connection对象setcnn=nothing><body><html>运行结果如图所示。图【例】运行结果【例】:多个关键字的模糊查询示例。<html><head><title>多个关键字的模糊查询示例<title><head><body><p>多个关键字之间用空格或逗号分开<p><formname="form"action=""method="post"><p>请输入关键字:<inputtype="text"name="key"size=""><inputtype="submit"name=submitvalue="确定"><p><form><ifrequestform("submit")<>""thenkeywords=trim(requestform("key"))'将查询关键字前后空格删除下面结合模糊运算符号举例讲解模糊查询ifkeywords=""thenresponseclear()responsewrite"请<ahref=asp>返回<a>输入查询搜索关键字!"responseendendif'下面建立connection对象dimcnn,strconnstrconn="dbq="servermappath("jxglmdb")"driver={microsoftaccessdriver(*mdb)}"setcnn=servercreateobject("adodbconnection")cnnopenstrconn'建立查询字符串keywords=replace(keywords,"","")'将获得的字符串中中文逗号换成空格keywords=replace(keywords,",","")'将获得的字符串中英文逗号换成空格strsql="select*fromkcwhere"'关键字匹配sql语句keywordarray=split(keywords)'将输入的字符串根据空格分开成数组max=ubound(keywordarray)'得到输入的关键字个数ifmax=then'如果max等于,说明只输入了一个关键字strsql=strsql"课程名称like'"keywordarray()"'"'模糊搜索else'如果含有多个关键字采用循环处理fori=tomaxiftrim(keywordarray(i))<>""thenstrsql=strsql"课程名称like'"keywordarray(i)"'or"endifnextstrsql=strsql"课程名称like'"keywordarray(max)"'"endif'创建recordset对象setrs=servercreateobject("adodbrecordset")rsopenstrsql,cnn,,'执行查询结果保存在rs中ifrseoforrsbofthen'不存在记录responsewrite("没有你要找的内容")responseendelse'存在记录dowhilenotrseof'循环显示所有记录的idid=rs("id")><=rs("id")><=rs("课程名称")><br><rsmovenextloopendifendif><body><html>运行结果如图所示。记录移动当打开一个非空记录集时记录指针总是指向第一条记录。使用recordset对象的几个相关方法和属性可以实现记录指针定位到不同的记录。recordset对象中与记录指针移动相关的方法主要有个即movefirstmovelastmoveprevioumovenextmoven其中最常见的方法是movenext。记录移动时使用的属性是eof起到辅助作用。查询分页在查询信息时返回大量的信息是很常见的。如果把查询结果在单页显示出来既不美观也不方便阅读解决这种问题的最好方法是分页所谓分页就是每次每页只显示固定数目的记录页和页之间可以自由反复切换。recordset对象的属性中pagesize、pagecount和absolutepage与分页密切相关。【例】:分页示例版本之一。<head><title>分页显示数据<title><head><body><dimcnn,rs,strsql'建立connection对象setcnn=servercreateobject("adodbconnection")cnnopen"dbq="servermappath("jxglmdb")"driver={microsoftaccessdriver(*mdb)}"'建立recordset对象setrs=servercreateobject("adodbrecordset")strsql="select*fromxsxx"rsopenstrsql,cnn,'注意参数设置'如果记录集不是空的就执行分页显示ifnotrsbofandnotrseofthen'下面一段是显示从到总页数的页码如不是当前页就加上超链接rspagesize='设置每页条记录responsewrite"请选择数据页:"fori=torspagecountifi=pagenothen'如是当前页就不加超链接responsewritei"nbsp"else'如不是当前页就加上超链接responsewrite"<ahref='asppageno="i"'>"i"<a>nbsp"endifnext'下面一段判断当前显示第几页如是第一次打开为否则由传回参数决定dimpagenoifrequestquerystring("pageno")=""thenpageno=elsepageno=cint(requestquerystring("pageno"))'用将字符串变为整数endif'下面一段开始分页显示指向要显示的页然后逐条显示当前页的所有记录。rsabsolutepage=pageno'设置当前显示第几页dimi,j'该变量用来控制显示当前页记录j=rspagesizedowhilenotrseofandj>'循环直到当前页结束或记录集结尾j=jresponsewrite"<br>"rs("姓名")'输出姓名字段值rsmovenextloopelseresponsewrite"该记录集为空"endif'关闭对象就省略了><body><html>运行结果如图所示。图【例】运行结果【例】:分页示例版本之二。<html><head><title>分页显示数据<title><head><body><'建立connection对象dimdb,rs,strsql,strconnstrconn="dbq="servermappath("jxglmdb")"driver={microsoftaccessdriver(*mdb)}"setdb=servercreateobject("adodbconnection")dbopenstrconn'这里利用非数据源连接setrs=servercreateobject("adodbrecordset")strsql="select*fromxsxx"rsopenstrsql,db,'注意参数设置'如果记录集不是空的就执行分页显示ifnotrsbofandnotrseofthen'下面一段判断当前显示第几页如是第一次打开为否则由传回参数决定dimpagenoifrequestquerystring("pageno")=""then'条件判断pageno=elsepageno=cint(requestquerystring("pageno"))'用cint将字符串变为整数endif'下面一段开始分页显示指向要显示的页然后逐条显示当前页的所有记录。rspagesize=rsabsolutepage=pageno'设置当前显示第几页dimi'该变量用来控制显示当前页记录ifpageno=rspagecountthen><p>当前【最后一页】【共<=rspagecount>页】<p><else><p>当前【第<=pageno>页】【共<=rspagecount>页】<p><endifi=rspagesizedowhilenotrseofandi>'循环直到当前页结束或记录集结尾i=iresponsewriters("姓名")"<br>"'输出姓名字段值rsmovenextloopresponsewrite"<p>"showf=true:showp=true:shown=true:showl=true'赋初始值ifrspagecount<then'总数为时不显示分页导航条showf=false:showp=false:shown=false:showl=falseelse'如果有多页时selectcasepagenocase'当前页码为时只需显示下一页和最后一页showf=false:showp=falsecaserspagecount'页码为最后一页只需显示第一页和上一页shown=false:showl=falseendselectendif'定义一个分页导航的函数和显示相关的分页导航条subshowlink(npage,atitle)responsewrite("<ahref='asppageno=")responsewrite(cstr(npage)"'>"atitle"<a>")endsubifshowfthencallshowlink(,"第页")ifshowpthencallshowlink(pageno,"上一页")ifshownthencallshowlink(pageno,"下一页")ifshowlthencallshowlink(rspagecount,"最后一页")elseresponsewrite"该记录集为空"endif><body><html>运行结果如图所示。查询、添加、删除、更新ASP对数据库记录的查询、添加、删除、更新不仅可以用SQL语句完成也可以利用recordset对象的方法实现理论上只要SQL语句可以完成的操作使用recordset对象也可以实现但两者方法各有利弊。recordset对象有个方法可直接用来处理记录的查询、添加、删除、更新他们是find、addnewdeleteupdadatecancelupdateupdatebatch。【例】:recordset对象的find方法应用示例格式:find(查询条件,跳过记录行数,查询方向,开始位置)说明:“查询条件”是由字段名、比较运算符和值构成的字符串“跳过记录行数”指定跳过的记录行其默认值为零“查询方向”指定搜索是向前移动(取值)还是向后移动(取值)“开始位置”指定操作搜索的起始位置。<html><head><title>recordset对象中的find方法应用示例<title><head><body><formname="form"method="post"action="">输入查找的课程名称<inputtype="text"name="mc"size=""><inputtype="submit"value="提交"><form><mc=requestform("mc")ifmc<>""thensetcnn=servercreateobject("adodbconnection")cnnopen"dbq="servermappath("jxglmdb")"driver={microsoftaccessdriver(*mdb)}"setrs=servercreateobject("adodbrecordset")rsopen"kc",cnn,'查找记录rsfind"课程名称like'"mc"'"ifnotbofthenresponsewrite"课程名称:"rs("课程名称")endifendif><body><html>运行结果如图所示图【例】运行结果【例】:recordset对象的addnewdeleteupdate示例。<html><head><title>recordset对象中的addnew、delete和update方法应用示例<title><head><body>请输入新增加的课程信息<p><formname="form"method="post"action="asp">课程代号<inputtype="text"name="dh"size=""><br>课程名称<inputtype="text"name="mc"size=""><br>授课教师<inputtype="text"name="js"size=""><br><inputtype="submit"value="提交"><inputtype="reset"value="重置"><form><dh=requestform("dh")mc=requestform("mc")js=requestform("js")ifdh<>""andmc<>""andjs<>""thensetcnn=servercreateobject("adodbconnection")cnnopen"dbq="servermappath("jxglmdb")"driver={microsoftaccessdriver(*mdb)}"setrs=servercreateobject("adodbrecordset")rsopen"kc",cnn,,,'添加记录rsaddnew'缺省参数时在表尾添加空白记录rs("课程代号")=dhrs("课程名称")=mcrs("教师")=jsrsupdate'本句可省略因为后面使用了rsmove'删除记录ifnotbofthenrsmove,'表示向表头方向移动表示当前记录指针在表尾rsdeleteendifrsupdateresponsewrite("分别添加和删除了一条记录")rsclosesetrs=nothingcnnclosesetcnn=nothingendif><body><html>Fields数据集合和Field对象field对象是recordset对象的子对象。简单地说一个记录集就好比一个电子表格该表格内总是包含有许多列(字段)每一个字段就是一个field对象而所有的field对象组合起来就是一个fields数据集合。其实在前面输出记录的案例中已经隐式建立和使用了fields数据集合和field对象。由于fields数据集合是记录集对象的默认数据集合item是fields数据集合的默认方法value又是field对象的默认属性通常可以省略这些数据集合和对象及其属性和方法。比如输出姓名字段值时可用以下几种格式:<=rs("姓名")><=rsfields("姓名")><=rsfields("姓名")value><=rsfieldsitem("姓名")value><=rs("n")>'n代表字段顺序号从开始计数<=rsfields("n")>'n代表字段顺序号从开始计数<=rsfields("n")value>'n代表字段顺序号从开始计数<=rsfieldsitem("n")value>'n代表字段顺序号从开始计数.Fields数据集合的属性fields数据集合的属性只有一个即count用来统计recordset(记录集)对象中field(字段)对象的个数。其语法格式如下:<rsfieldscount>.Fields数据集合的方法fields数据集合提供了两种方法简要如下:⑴Item()fields数据集合的默认方法可省略显式建立一个field对象语法格式如下:格式:setfd=rsfieldsitem(字段名或字段索引值)说明:明确建立一个field对象字段索引值对应记录集中字段的序号取值从到fieldscount。⑵Refresh()刷新记录可以重新取得fields数据集合及其包含的field对象语法格式如下:格式:fdrefresh.Field对象的属性字段(field)在关系型数据库中称为column它是数据库中最小的单位。在ado对象中字段对应的是field对象其中namevaluetype三个为常用属性。常见属性如表所示。表field对象的属性属性名功能name表示对象属性的名称(字段名称)value默认属性表示对象属性的属性值(字段值)type表示对象属性的数据类型(字段数据类型)attribute表示fields对象的特性取值及其含义如表所示表续表actualsize表示字段中实际存储的数据长度numericscale表示字段被允许存储的位数precision表示字段被允许存储的最大数字definedsize表示数据字段在数据库中所定义的长度(字段数据宽度)originalvalue表示数据字段是从第一次启动或是在调用update方法前的值underlyingvalue表示在数据库中field对象的当前值表attribute属性值属性名数值功能adfldmaydefer一次可以不取回一个字段的所有的字段adfldupdatable该的字段不允许更新adfldunknownupdatable数据源可写与否不能确定adfldfixed该字段的宽度固定多余部分将被截去adfldisable该字段可接受空值adfldmaybe该字段可读取空值adfldlong该字段是长二进制字段adfldrowid该字段可以包含行记录值adfldrowversion能够进行跟踪日期和时间的标识.Field对象的方法field对象提供了两种方法如表所示。表field对象的方法方法名功能field对象名appendchunkdata负责将长二进制数据写入数据库如图片field对象名getchunk(size)负责从数据库读取长二进制数据如图片【例】:图片的无组件方法上传示例分析:数据库中的数据最终保存在某个数据库表中用于保存图片的数据类型与一般数据有所不同一般被定义为OLE对象类型。主要涉及的技术有以下几个方面知识点:⑴利用html表单的formenctype属性和file控件类型实现图片数据上传功能<formenctype="multipartformdata"method="post"><inputtype="file"name="picfile"size=""><inputtype="submit"value="上传"><form>⑵利用request对象的binaryread方法和totalbytes属性来获取表单提交的数据responsebuffer=true'需将responsebuffer=true属性值设置为trueformsize=requesttotalbytes'获取数据大小formdata=requestbinaryread(formsize)'获取二进制数据bncrlf=chrb()chrb()'二进制数据需用chrb()chrb()隔开'获取二进制数据前后分隔的字符串divider=leftb(formdata,clng(instrb(formdata,bncrlf)))'找出二进制数据的起始位置datastart=instrb(formdata,bncrlfbncrlf)'得到二进制数据的长度dataend=instrb(datastart,formdata,divider)datastart'获取真正的二进制数据mydata=midb(formdata,datastart,dataend)⑶利用adorecordset对象的fieldappendchunk方法将图形数据保存到图片处理字段中rs("照片")appendchunkmydatahtm代码:<html><head><title>图片上传数据库示例<title><head><body><formname="form"method="post"action="asp">请输入用户身份学号:<inputtype="text"name="stuid"size=""><inputtype="submit"value="提交"><inputtype="reset"value="重置"><form><body><html>asp代码:<responsebuffer=true><session("stuid")=requestform("stuid")stuid=session("stuid")ifstuid<>""then><formenctype="multipartformdata"action="sendasp"method="post"name="form">请选择上传相片:<inputtype="file"name="picfile"size=""><inputtype="submit"value="上传"><form><elseresponseredirect"htm"endif>图片数据处理文件sendasp代码如下:<responsebuffer=true'需将responsebuffer=true属性值设置为trueformsize=requesttotalbytes'获取数据大小formdata=requestbinaryread(formsize)'获取二进制数据bncrlf=chrb()chrb()'二进制数据需用chrb()chrb()隔开'获取二进制数据前后分隔的字符串divider=leftb(formdata,clng(instrb(formdata,bncrlf)))'找出二进制数据的起始位置datastart=instrb(formdata,bncrlfbncrlf)'得到二进制数据的长度dataend=instrb(datastart,formdata,divider)datastart'获取真正的二进制数据mydata=midb(formdata,datastart,dataend)'建立数据库连接dimcnn,strconnstrconn="dbq="servermappath("jxglmdb")"driver={microsoftaccessdriver(*mdb)}"setcnn=servercreateobject("adodbconnection")cnnopenstrconnsetrs=servercreateobject("adodbrecordset")strsql="select*fromxsxxwhere学号='"session("stuid")"'"rsopenstrsql,cnn,,'不能用sqlupdate语句更新二进制数据rs("照片")appendchunkmydatarsupdatersclosesetrs=nothingsetconn=nothing><center>数据已经成功传送<center>运行结果:数据已经成功传送。【例】:图片的无组件下载显示示分析:要将二进制数据从数据库提取并显示在浏览器上一般通过三个步骤:⑴将二进制数据从数据库表中相应字段中读取。<'利用fields数据集合的actualsize获取照片大小picsize=rsfields("照片")actualsizeimagedata=rs("照片")getchunk(picsize)>⑵将读取的二进制数据输出到客户端浏览器中。'需将responsecontenttype属性值设置为imagejpgresponsecontenttype="imagejpg"responsebinarywriteimagedata>⑶通过html的<img>标记完成图片的显示。<imgsrc=showimageaspid=imgid>'imgid是照片的编号htm代码如下:<html><head><title>图片下载显示示例<title><head><body><formname="form"method="post"action="asp">请输入查询学生的学号:<inputtype="text"name="stuid"size=""><inputtype="submit"value="查询"><inputtype="reset"value="重置"><form><body><html>运行结果如图所示。图htm运行结果asp代码如下:<head><title>图片显示示例<title><head><stuid=requestform("stuid")setconn=servercreateobject("adodbconnection")strcnn="dbq="servermappath("jxglmdb")"driver={microsoftaccessdriver(*mdb)}"connopenstrcnnsetrs=servercreateobject("adodbrecordset")strsql="select*fromxsxxwhere学号='"stuid"'"rsopenstrsql,conn,,ifrseofthenresponsewrite"查无此人,单击<ahref=htm>返回<a>"responseend()endif><body><tablealign="center"border=""><tr><tdcolspan="">学生基本信息<td><tr><tr><td>学号<td><td><=rs("学号")><td><tdrowspan=""><imgsrc=showaspstuid=<=rs("学号")>width=""height=""border=""align="middle"><td><tr><tr><td>姓名<td><td><=rs("姓名")><td><tr><tr><td>专业<td><td><=rs("专业")><td><tr><tr><td>性别<td><td><=rs("性别")><td><tr><tr><td>出生日期<td><td><=rs("出生日期")><td><tr><table><body><html>图片显示处理showasp代码如下:<'建立数据库连接dimconn,strcnnsetconn=servercreateobject("adodbconnection")strcnn="dbq="servermappath("jxglmdb")"driver={microsoftaccessdriver(*mdb)}"connopenstrcnnstuid=trim(requestquerystring("stuid"))ifstuid<>""thenstrsql="select照片fromxsxxwhere学号='"stuid"'"'建立记录集dimrs,strsqlsetrs=servercreateobject("adodbrecordset")rsopenstrsql,conn,,'需将responsecontenttype属性值设置为"imagejpg"responsecontenttype="image*"ifnotrseofthen'利用fields数据集合的actualsize获取照片大小picsize=rsfields("照片")actualsizeimagedata=rs("照片")getchunk(picsize)responsebinarywriteimagedataendifrscloseelseresponseredirect"htm"endif>运行结果如图所示。图【例】最终运行结果Property对象和Properties数据集合ADO组件的connection、command、recordset和field对象都包含一个properties数据集合properties数据集合包含着connection、command、recordset和field等所有对应的property对象。Property对象property对象记录connection、command、recordset和field等对象的每一项属性值。常见如下:⒈Name属性property对象的name属性表示对象属性的名称其语法如下:string=propertyname⒉Value属性property对象的value属性表示对象属性的属性值其语法如下:variant=propertyvalue⒊Type属性property对象的type属性表示对象属性的数据类型其语法如下:datatypeenum=propertytype⒋Attribute属性property对象的attribute属性表示field对象的特性其语法如下:longinteger=propertyattributeProperties数据集合properties数据集合提供乐一个属性和两个方法。简要介绍如下:⒈Count属性properties数据集合的count属性用来取得properties数据集合中包含的property对象个数。其语法如下:longinteger=propertiescount⒉Item方法properties数据集合的item方法用来取得properties数据集合中所包含的所有property对象。其语法如下:setproperty=propertiesitem(index)或setproperty=properties(index)⒊Refresh方法properties数据集合的refresh方法就是记录的刷新可以重新获得properties数据集合中所包含的property对象。其语法如下:propertiesrefresh【例】:property对象和properties数据集合应用示例。<html><head><title>Properties数据集合和Property对象应用示例<title><head><body><dimcnn,strconnstrconn="dbq="servermappath("jxglmdb")"driver={microsoftaccessdriver(*mdb)}"setcnn=servercreateobject("adodbconnection")cnnopenstrconn>connection对象中包含<=cnnpropertiescount>个属性<br><tableborder=""><tr><td>name属性<td><td>type属性<td><td>value属性<td><tr><fori=tocnnpropertiescount><tr><td><=cnnproperties(i)name><td><td><=cnnproperties(i)type><td><td><=cnnproperties(i)value><td><tr><nextsetcnn=nothing><table><body><html>运行结果如图所示。本章小结开发ASP应用程序的一个重要环节就是链接数据库、查询数据以及操作数据同时也是ASP编程的精华所有这些都离不开ADO技术的参与和应用。本章重点介绍了ADO数据库编程的三大对象即connectionrecordset和command的使用方法。熟练掌握数据库连接数据库的分页显示以及利用SQL语句操作数据库的方法是学习ADO的基本要求。习题九一、填空题为了实现对数据库操作需要利用内置对象()和内置组件()及其()对象来创建一个数据库连接接对象实例。ADO除了可用数据源连接数据库外还可通过()和()链接字符串来实现对数据库的连接。ADO的核心对象是()()和()。为了建立与数据库的连接必须调用连接对象的()方法连接建立后可利用链接对象的()方法来执行sql语句。关闭连接并彻底释放所占的系统资源应调用连接对象的()方法并使用()语句来实现。用于设置连接超时时间的属性是()用于设置sql语句的最大执行时间的属性是()。利用记录集对象向数据表添加记录时应先调用()方法然后在给各字段赋值最后在调用()方法来更新记录数据。若要删除记录可通过记录集对象的()来实现也可通过()对象执行sql的()语句来实现。记录分页时用于决定每个逻辑页面的记录数的属性是()设置该属性后逻辑页面的个数可通过()属性来获得。通过设置()属性的值可将记录指针定位到页面的首记录。判断记录指针是否到了记录集的末尾的属性是()向下移动指针可调用记录集对象的()方法来实现。若要获得当前记录集的记录条数可使用()对象的()属性来实现另外也可通过执行sql语句()来获得表记录的总数此时sql语句的执行后所返回的记录集有()条记录该记录有()个字段。二、单项选择题.可以使用ado来访问的数据库是()。amicrosoftaccessbmicrosoftsqlservercoracled以上都是命令对象command用来执行()。asql语句bsqlserver存储过程c连接数据库d符合记录集可利用errors集合的什么属性判断是否有error发生()。anumberbdescriptionccountdsource可以用来管理非关系型数据的数据库技术是()aodbcbolecactivexddsn在连接对象中用于存储连接信息的字符串的属性是()aconnectionstringbconnectioncopendexecute在记录集中用于返回记录总数的是()arscountbrsrecordcountcrsfieldcountdrspagecount在连接对象中可以执行sql语句的是()arunbopencexecutedcommand在分页显示时可以指定每页记录数的是()amaxrecordbpagesizecpagenumdpagecount用于获取当前记录位置号的是()aabsolutepagebrecnocabsolutepositiondrecordcount将二进制数据从数据库表中相应字段中读取的方法是()abinarywritebgetchunkcappendchunkdopen三、上机题.在jxglmdb中增加一个表user表表结构包括id和学号username和userpwd四个字段实现以下几个方面:⑴尝试编写一个动态网页可以向数据表中添加数据要求username和userpwd不能为空。⑵创建一个允许用户修改密码的页面⑶尝试编写设置学号不允许出现重复值.创建一个sport数据库和包括id和ab和c四个字段的sport表ab和c三个字段初始值为实现调查年北京奥运会奖牌最多的国家:⑴尝试编写三个动态网页分别处理提供选择的表单接受数据和显示调查的结果

用户评价(0)

关闭

新课改视野下建构高中语文教学实验成果报告(32KB)

抱歉,积分不足下载失败,请稍后再试!

提示

试读已结束,如需要继续阅读或者下载,敬请购买!

评分:

/161

VIP

在线
客服

免费
邮箱

爱问共享资料服务号

扫描关注领取更多福利