ASP编程:ASP与数据库(三)
在实现ERP等高端的ASP应用时,用户需要提供核心的经营资料,需要ASP商有很高的信用度。楼上说交互性不好,太牵强了吧。在微软提供的一套框架中,利用asp做网站,开发效率高,使用人数少,减少不必要的开销。交互性是互动方式,是有开发人员决定的。在上两讲中,我们解说了ASP中数据库的基础利用,明天将先容几种十分有用的手艺。1、分页手艺
后面我们先容了怎样检索数据并输入到扫瞄器端,对大批数据而言,那样复杂的输入处置是完整能够的,可是若数据量很年夜,有几百条乃至上千条,一次将云云多的数据全体输入到客户端是不实际的,一来页面从上到下拉得很长,二来客户端守候的工夫太长,三来服务器的负载过年夜。以是接纳分页输入十分需要。
请求:输入Northwind.mdb“产物”表中的数据至扫瞄器,每页显现10条。
例wuf60.asp,这段代码仍是有点难度的,要多看多体味,AdoAccess.asp在上讲中提到过。
注:该例程吸取了某些书本中好的部分,特此声明。
<%@LANGUAGE="VBSCRIPT"%>
<!--#includefile="AdoAccess.asp"-->
<!--#includefile="adovbs.inc"-->
<%
DimRecordPerPage,absPageNum,TotalPages,absRecordNum,rsTest,StrSQL
absPageNum-以后页为第几页
TotalPages-总的页数
absRecordNum-以后页中某一笔记录的序号,如1-10
RecordPerPage=10每页显现的纪录数
获得所输入数据的以后页码
IfRequest.ServerVariables("CONTENT_LENGTH")=0Then
若充公到表单递交的数据(如初次加载该页时),则从第1页入手下手显现
absPageNum=1
Else
掏出按按钮时的页码
absPageNum=CInt(Request.Form("PressPageNum"))
如按上一页则页码-1,按下一页,则页码+1
IfRequest.Form("Submit")="上一页"Then
absPageNum=absPageNum-1
ElseIfRequest.Form("Submit")="下一页"Then
absPageNum=absPageNum+1
EndIf
EndIf
创立纪录集工具
SetrsTest=Server.CreateObject("ADODB.Recordset")
rsTest.CursorLocation=adUseClient如许设置可加重数据库负载
rsTest.CursorType=adOpenStatic游标必要前后挪动,不克不及设为仅向前
rsTest.CacheSize=RecordPerPage设置这个选项会进步功能
StrSQL="SELECT*FROM产物OrderBy产物ID"
rsTest.OpenStrSQL,Cnn,,,adCmdText
rsTest.PageSize=RecordPerPage设置每页的纪录数
IfNot(rsTest.EOF)Then
rsTest.AbsolutePage=absPageNum
EndIf
TotalPages=rsTest.PageCount
%>
<%上面部分输入以后页的数据至扫瞄器%>
<Html><Boby>
<tablecolspan=8cellpadding=5border=0>
<tr>
<tdalign=CENTERbgcolor="#800000"width="109"><fontstyle="ARIALNARROW"color="#ffffff"size="2">单价</font></td>
<tdalign=CENTERwidth=459bgcolor="#800000"><fontstyle="ARIALNARROW"color="#ffffff"size="2">产物称号</font></td>
</tr>
<%用轮回输入以后页的10条数据
ForabsRecordNum=1torsTest.PageSize
%>
<tr>
<tdbgcolor="f7efde"align=CENTER><fontstyle="ARIALNARROW"size="2"><%=rsTest("单价")%></font></td>
<tdbgcolor="f7efde"align=CENTER><fontstyle="ARIALNARROW"size="2"><%=rsTest("产物称号")%></font></td>
</tr>
<%
rsTest.MoveNext
IfrsTest.EOFThen
ExitFor假如已到纪录尾,加入-如最初一页数据不满页时
EndIf
Next
rsTest.Close:Cnn.Close
SetrsTest=Nothing:SetCnn=Nothing
%>
</table>
<%上面部分是两个按钮"上一页""下一页"%>
<FormAction="<%=Request.ServerVariables("SCRIPT_NAME")%>"Method="Post">
<InputType="Hidden"Name="PressPageNum"Value="<%=absPageNum%>">
<%
IfabsPageNum>1Then假如以后不是第一页,则显现上一页按钮%>
<InputType="Submit"Name="Submit"Value="上一页">
<%EndIf
IfabsPageNumTotalPagesThen假如以后页不是最初一页,则显现下一页按钮%>
<InputType="Submit"Name="Submit"Value="下一页">
<%EndIf%>
</Form>
<P><Center>[第<fontcolor="#CC0033"><%=absPageNum%></font>页,
共<fontcolor="#CC0033"><%=TotalPages%></font>页]</Center></P>
</BODY></HTML>
剖析:
1.Recordset工具一些有效的属性:
lrsTest.CursorLocation=adUseClient:也能够不要这句,但如许做能够加重数据库负载;
lrsTest.CacheSize=RecordPerPage:CacheSize属性用来决意每次用户端从数据库服务器获得的数据几;
lrsTest.PageSize:PageSize属性用来设置每页纪录数的几;
lrsTest.AbsolutePage:AbsolutePage属性设置以后数据在Recordset工具中的相对页数;
lrsTest.PageCount:PageCount属性用来猎取纪录集的总页数。
2.本例Form表单中利用了一个隐含字段PressPageNum用来传送点击按钮时为第几页。
2、毛病处置
代码实行的过程当中,大概因各类缘故原由产生毛病,如:代码自己有成绩、收集断开等等,以是在程序中设置毛病捕捉和处置长短常需要的。在ASP中,我们能够经由过程Connection工具的Errors数据汇合获得代码运转时所产生的毛病或告诫信息,其利用办法以下:
1.间接对Connection工具来利用:
SetErrs=Cnn.Errors
大概
Cnn.Errors
2.创建Recordset工具或Command工具后,再经由过程其ActiveConnection属性来利用Connection工具:
SetErrs=rsTest.ActiveConnection.Errors
大概
rsTest.ActiveConnection.Errors
提及来太粗象,举一实例吧:wuf61.asp
<%@LANGUAGE="VBSCRIPT"%>
<%OptionExplicit%>
<!--#includefile="adovbs.inc"-->
<%
Response.Expires=0
上面这句包管:即便剧本碰到毛病,也持续实行下一句
OnErrorResumeNext
DimCnn,rsTest,Errs,I
SetCnn=Server.CreateObject("ADODB.Connection")
CommandTimeout-与数据库毗连的最长守候工夫,缺省为15秒
Cnn.CommandTimeout=5
你能够分离鄙人面三种情形下检测毛病产生情形-以SQLServer为例
1-完整准确;2-未设置初始数据库;3-数据库名误为pvbs
Cnn.Open"Provider=sqloledb;UserID=sa;Password=;InitialCatalog=pubs;DataSource=ICBCZJP"
Cnn.Open"Provider=sqloledb;UserID=sa;Password=;InitialCatalog=;DataSource=ICBCZJP"
Cnn.Open"Provider=sqloledb;UserID=sa;Password=;InitialCatalog=pvbs;DataSource=ICBCZJP"
ForI=0ToCnn.Errors.Count-1
Source属性暗示形成毛病的来历
Response.Write"["&Cnn.Errors(I).Source&"]"
Description属性暗示毛病产生缘故原由或形貌
Response.WriteCnn.Errors(I).Description&"<br>"
Next
IfCnn.Errors.Count>0Then
Response.Write"毗连时产生"&Cnn.Errors.Count&"个毛病"&"<br>"
EndIf
SetrsTest=Server.CreateObject("ADODB.Recordset")
rsTest.Open"jobs",Cnn,adOpenForwardOnly,adLockReadOnly,adCmdTable
IfrsTest.ActiveConnection.Errors.Count>0Then
SetSession("Errs")=rsTest.ActiveConnection.Errors
Response.Redirect"ErrorHandle.asp"
EndIf
Cnn.Close
SetrsTest=Nothing:SetCnn=Nothing
%>
ErrorHandle.asp代码:
<%
DimI
ForI=0ToSession("Errs").Count-1
Response.Write"["&Session("Errs")(I).Source&"]"
Response.WriteSession("Errs")(I).Description&"<br>"
Next
%>
剖析:
在本例中,毛病大概在毗连时产生,也大概毗连是准确的,可是在利用Recordset工具时产生了毛病。
别的,在前面的一段代码中,将毛病汇合放进一个会话工具中,以便在页面之间挪用(碰到毛病时,转向毛病处置页面ErrorHandle.asp)。
实践上,你也完整能够将Recordset工具赋给Session工具,以完成纪录集在页面之间的挪用。
3、利用事件
事件这一观点长短常复杂和主要的,为了申明其用处,先假定呈现了以下情形:比方在电子商务中,在网长进行泉币转帐时,必需从某一帐户中减往某个数额并将其对等数额增加到另外一个帐户。不管个中的哪一个更新失利,都将招致帐户出入不屈衡(要末这边扣了,何处没有增添;要末这边没扣,何处却增添了)。假如利用事件举行这些变动,即可确保只能选择举行全体变动或不作任何变动(不是被完整准确实行,就是被全体作废)。
事件从属于Connection工具,Connection工具有三个与事件有关的办法:
lBeginTrans启动新的事件。
lCommitTrans保留一切变动并停止以后事件。
lRollbackTrans作废以后事件中所做的任何变动并停止事件,一般称为“回滚”。
我们无妨看一个实例wuf62.asp。
<%@LANGUAGE="VBSCRIPT"%>
<%OptionExplicit%>
<!--#includefile="adovbs.inc"-->
<%
Response.Expires=0
OnErrorResumeNext
DimCnn,StrSQL,rsTest
SetCnn=Server.CreateObject("ADODB.Connection")
Cnn.Open"Provider=sqloledb;UserID=sa;Password=;InitialCatalog=pubs;DataSource=ICBCZJP"
入手下手一个事件
Cnn.BeginTrans
StrSQL="Insertjobs(job_desc,min_lvl,max_lvl)Values(金融,16,86)"
Cnn.ExecuteStrSQL
上面第一句语句毛病,第二句准确
StrSQL="Updatejobs_errSETjob_desc=事件Wherejob_id=14"
StrSQL="UpdatejobsSETjob_desc=事件Wherejob_id=14"
Cnn.ExecuteStrSQL
IfCnn.Errors.Count>0Then
Response.Write"产生毛病,体系恢复事件入手下手时的形态,既不会新增,也不会修正"&"<br>"
Cnn.RollbackTrans
Else
Response.Write"没有毛病,保留对数据库的变动,新增一条数据,修正一条数据"&"<br>"
Cnn.CommitTrans
EndIf
SetrsTest=Cnn.Execute("Select*Fromjobswherejob_id>=14")
WhileNotrsTest.EOF
Response.Writerstest(0)&rstest(1)&rstest(2)&rstest(3)&"<br>"
rsTest.MoveNext
Wend
该例仅为测试,故恢单数据库本来数据
Cnn.Execute"UpdatejobsSETjob_desc=DesignerWherejob_id=14"
Cnn.Execute"DELETEjobsWherejob_id>14"
Cnn.Close:SetCnn=Nothing
%>
本例中,新增(Insert)和修正(Update)要末同时产生,要末都不产生,不会呈现新增一条数据,而修正却由于语句毛病未产生的情形。在数据库编程时利用事件是一个十分好的习气。
4、多个纪录集的处置
偶然候我们必要同时获得两个表的数据,假如放在一条SQL语句中前往,则能够削减收集传输并进步运转效力。
例wuf64.asp,这个例子还顺带解说了怎样利用轮回输入字段值(而之前我们都是用“rsTest(0)&rsTest(1)&…”如许的笨办法输入的,假如只要两三个字段,用这类办法明显更简便),假如一时看不分明,请下载复杂一点的wuf63.asp,牢记!。
<%@LANGUAGE="VBSCRIPT"%>
<%
OptionExplicit
Response.Expires=0
DimCnn,StrSQL,rsTest,I
SetCnn=Server.CreateObject("ADODB.Connection")
Cnn.Open"Provider=sqloledb;UserID=sa;Password=;InitialCatalog=pubs;DataSource=ICBCZJP"
SetrsTest=Server.CreateObject("ADODB.Recordset")
检索多个纪录集
StrSQL="SelectCOUNT(*)AS雇员数Fromemployee;Select*Fromjobs"
rsTest.OpenStrSQL,Cnn,,,adCmdText
WhileNotrsTestIsNothing
Response.Write"<TableBorder=2><tr>"
rsTest.Fields.Count-纪录集字段个数
ForI=0TorsTest.Fields.Count-1
rsTest(I).Name-第I个字段的字段名
Response.Write"<td>"&rsTest(I).Name&"</td>"
Next
Response.Write"</tr>"
WhileNotrsTest.EOF
Response.Write"<tr>"
用轮回输入每个字段的值
ForI=0TorsTest.Fields.Count-1
Response.Write"<td>"&rsTest(I)&"</td>"
Next
Response.Write"</tr>"
rsTest.MoveNext
Wend
读取下一个Recordset工具
SetrsTest=rsTest.NextRecordset
Wend
Cnn.Close
SetrsTest=Nothing:SetCnn=Nothing
%>
申明:SQLServer数据库撑持多个纪录集,而Access数据库不撑持。
5、尽早封闭毗连,开释资本
在以往的例子中,都是最初封闭毗连,但是Connection工具要占用资本,现实上,按上面wuf65.asp所供应的办法,完整能够更早一点封闭毗连。
<%@LANGUAGE=VBScript%>
<!--#includefile="AdoAccess.asp"-->
<!--#includefile="adovbs.inc"-->
<%wuf65.asp
DimStrSQL,rsTest
StrSQL="Select*From运货商"
SetrsTest=server.CreateObject("ADODB.Recordset")
必定要利用客户端游标,不然不可
rsTest.CursorLocation=adUseClient
rsTest.OpenStrSQL,Cnn,,,adCmdText
删除纪录集对Connection工具的依附
SetrsTest.ActiveConnection=Nothing
尽量早的封闭毗连
Cnn.close:SetCnn=Nothing
DoWhileNotrsTest.EOF
Response.WritersTest(0)&""&rsTest(1)&""&rsTest(2)&""&"<BR>"
rsTest.MoveNext
Loop
SetrsTest=Nothing
%>
我想详细了解ASP整站代码与PSP整站代码有什么优缺点,那个更好,更安全,更用容易维护,和管理。。。 从事这个行业,那么你可以学ASP语言,简单快速上手,熟练dreamweav排版,写asp代码,熟练photoshop处理图片,打好基础就行了 下载一个源代码,然后再下载一个VBScript帮助,在源代码中遇到不认识的函数或是其他什么程序,都可以查帮助进行解决,这样学习效率很高。 ASP也是这几种脚本语言中最简单易学的开发语言。但ASP也是这几种语言中唯一的一个不能很好支持跨平台的语言。 因为ASP脚本语言非常简单,因此其代码也简单易懂,结合HTML代码,可快速地完成网站的应用程序。 哪些内置对象是可以跳过的,或者哪些属性和方法是用不到的? 运用ASP可将VBscript、javascript等脚本语言嵌入到HTML中,便可快速完成网站的应用程序,无需编译,可在服务器端直接执行。容易编写,使用普通的文本编辑器编写,如记事本就可以完成。由脚本在服务器上而不是客户端运行,ASP所使用的脚本语言都在服务端上运行。 多看多学多思。多看一些关于ASP的书籍,一方面可以扩展知识面一方面可以鉴借别人是如何掌握、运用ASP的;多学善于关注别人,向同学老师多多学习,不论知识的大小;多思则是要将学到的知识灵活运用。 学习是为了用的,是为了让你的程序产生价值,把握住这个原则会比较轻松点。除此之外,课外时间一定要多参加一些社会实践活动,来锻炼自己的能力。
页:
[1]