asp学习

ASP出来有好些年了,但还是有很多朋友徘徊在ASP的大门之外,关于她的本身有太多的内容,要是细说,讲几天都讲不完,这里只是说一些ASP与ACCESS的一些简单操作,给大家开一个小头^^。

我们来看看一个简单留言本的构成:

----------------------------------

1。ACCESS2000数据库bookdata.mdb,放置在data目录下

----------------------------------

有2个表:一个是admin,用于放置管理员信息,字段有id(自动计数),username(文本),adminpsw(文本);一个是info,用于放置留言,字段有id(自动计数),name(文本),from(文本),email(文本),neirong(备注),uptime(默认值为now())。

!是不是发现在ACCESS里改动数据后数据库会变的很大?即使删除数据?这里有个简单的方法,新建一个数据库,把原来的数据库全部导入,你就会看到数据库缩小了不少^^,然后覆盖回去吧

----------------------------------

2。数据库连接文件conn.asp

----------------------------------

<%连接数据库有多种方法,下面的采用较老版本ACCESS驱动的连接方法

set conn=server.createobject("adodb.connection")

DBPath = Server.MapPath("data/bookdata.mdb") 这里可以将mdb文件改名

conn.Open "driver={Microsoft Access Driver (*.mdb)};dbq=" & DBPath

%>

----------------------------------

3。留言本首页index.asp

----------------------------------

<%@LANGUAGE="VBSCRIPT"%>

<!--#include file="conn.asp"--><!--包含连接文件-->

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=gb2312">

<title>ASP+ACCESS简单留言本</title>

<style type="text/css">

<!--

A:link,A:active,A:visited{TEXT-DECORATION:none ;Color:blue}

A:hover{TEXT-DECORATION:none;Color:red}

BODY,table,td{FONT-SIZE: 12px;COLOR: #000000;FONT-FAMILY:宋体;}

-->

}

</style>

</head>

<body><div align="center">

<table cellspacing=0 cellpadding=0 width=600 border=0>

<tr>

<td><center><font size=3 color=blue>欢迎来到我的留言本,多多指教</font></center></td>

</tr>

</table>

<table width="600" border="0" cellspacing="0" cellpadding="0">

<tr>

<td align="right">‖<a href="add.asp">我要留言</a>‖<a href="login.asp">管理进入</a>‖</td>

</tr>

</table>

<%

最典型的ADO应用

set rs=server.CreateObject("adodb.recordset")

建立数据查询,以时间先后排序(近的在最上面)

strSQL = "SELECT * FROM info ORDER BY uptime DESC"

rs.Open strSQL,conn,1,1

如果有记录则循环显示所有数据

Do While Not rs.EOF

%>

<hr width="600" size="1" noshade height=1>

<table width=600 border="0" cellpadding="2" cellspacing="0">

<tr><td>来自 <% = rs("from") %> 的 <a href="mailto:<% = rs("email") %>"><% = rs("name") %></a> 于<% = rs("uptime") %> 写下了

<% = rs("neirong") %>

</td></tr>

</table>

<%

rs.MoveNext

loop

rs.close

set rs=nothing

conn.close

set conn=nothing

%>

</div></body></html>

----------------------------------

4。留言增加页add.asp

----------------------------------

<%@LANGUAGE="VBSCRIPT"%>

<!--#include file="conn.asp"-->

<%

如果能从浏览器客户端得到add的值,则执行添加数据

dim cadd

cadd= request("action")

if cadd= "add" then

dim cname,cfrom,cemail,cneirong

Trim()函数的作用是将取得的数据前后空格去掉,如果有的话

cname=Trim(Request.form("name"))

cfrom=Trim(Request.form("from"))

cemail=Trim(Request.form("email"))

cneirong=Trim(Request.form("neirong"))

Set rs = Server.CreateObject("ADODB.Recordset")

注意下面的 1,2 这个是Recordset对象的LockType属性,当为1,2时才允许更新数据

1,1 为只读(默认) 详情请查询相关资料

rs.Open "info",conn,1,2

rs.addnew

rs("name")=cname

rs("from")=cfrom

rs("email")=cemail

rs("neirong")=cneirong

rs("uptime")=now()

rs.update

rs.close

set rs=nothing

response.redirect "index.asp"

end if

%>

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=gb2312">

<title>填写留言</title>

<style type="text/css">

<!--

A:link,A:active,A:visited{TEXT-DECORATION:none ;Color:blue}

A:hover{TEXT-DECORATION:none;Color:red}

BODY,table,td{FONT-SIZE: 12px;COLOR: #000000;FONT-FAMILY:宋体;}

-->

}

</style>

<script>

function check(){

var name = document.addform.name.value;

var neirong= document.addform.neirong.value;

if (name=="" || neirong==""){

<%使用Recordset读取数据

创建一个Recordset对象实列

set myRecordset=Server.CreateObject("ADODB.Recordset")

定义用于创建Recordset的SQL语句

SQL="select * from student"

打开Recordset对象,传递SQL语句和其他参数

myRecordset.open SQL, "DSN=StudentWD=magic;UID=Student"

移动所返回的Recordset对象中的记录,并把记录输出到HTML表中

%>

<table border=1>

<tr>

<%

for I=0 to myRecordset.fields.count-1

%>

<td><b><%=myRecordset(I).name%></b></td><%next%></tr>

<%

do while not myRecordset.BOF

%>

<tr><%

for j=0 to myRecordset.count-1

%>

<td aligh=top><%=myRecordset(I)%></td>

<% next %>

</tr>

<%

myRecordset.movenext

loop%>

</table>

<%@LANGUAGE="VBSCRIPT"%>

<!--#include virtual="/adovbs.inc"-->

<!--如果你使用了ADO常量,这个文件必须包含-->

<%

dim cadd

cadd= request("action")

if cadd= "add" then

on error resume next

用Trim()函数去掉提交数据开头和结尾的空格,如果有的话

cname=Trim(Request.form("name"))

cyear=Trim(Request.form("year"))

cid=Trim(Request.form("id"))

conn="DSN=student;uid=student;pwd=magic"

set rs=server createobject("adodb.Recordset")

rs.open "authors",conn,adoenstatic,adlockoptimistic

rs.addnew

rs("au_id")=cid

rs("name")=cname

rs("year")=int(cyear)

rs.update

rs.close

set rs=nothing

on error的使用方法

if err.number>0 then

response.write "vbscript errors occured:"&"

"

response.write "error number="&err.number&"

"

response.write "error descr="&err.description&"

"

response.write "help context="&err.helpcontext&"

"

response.write "help path="&err.helppath&"

"

response.write "native error="&err.nativeerror&"

"

response.write "source="&err.sourcr&"

"

else

response.write "record was added fine!

"

end if

end if

%>

<html>

<head>

<title>用Recordset向数据库中增加数据</title>

<body bgcolor="#ffffff">

<!--下面的表单用于客户端输入数据-->

<form name="myauthor" action="addnew.asp?action=add",method="post">

author id: <input type="text" name="id"></p>

author name: <input type="text" name="name"></p>

year born: <input type="text" name="year"></p>

<input type="submit"></p>

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

我们可以很容易的利用SQL语句从数据库中刷取出我们想要的数据,如:

sql="select * from info order by time desc"

这条语句就是说从info表中按time字段的值排列取出所有数据,我们怎样取出前10条呢?我在开始学习SQL的时候不知道用什么可以做到,只好用一个小循环来实现,其实非常简单,这样就可以拉:

sql="select top 10 * from info order by time desc"

但是我们一定要取出所有数据怎么办呢?如果取出的数据比想象中的多怎么办呢?难道在一页里全部显示?所以我们就要用到ASP数据库应用中很重要的一个方面:分页显示。

(等有时间再添 或哪位兄弟帮个小忙,写详细点,拜托 )

(啊哈,今天心情不错,继续^^)

------------------------------------------------------------------------------------

第一种方法:

通过Recordset的GetRows方法(关于Recordset的更多信息可以参考ASP的帮助文件?有吗?晕S,到网上搜索一下可以有一大堆),可以实现数据记录的分页显示。比如下面的这个列子:

<%@ Language = VBs cript %>

<% Option Explicit %>

<%

Dim iStart, iOffset

iStart = Request("Start")

iOffset = Request("Offset")

if Not IsNumeric(iStart) or Len(iStart) = 0 then

iStart = 0

else

iStart = CInt(iStart)

end if

if Not IsNumeric(iOffset) or Len(iOffset) = 0 then

iOffset = 10

else

iOffset = Cint(iOffset)

end if

Response.Write "察看 " & iOffset & " 个记录从 " & iStart & "开始

"

Dim objConn, objRS

Set objConn = Server.CreateObject("ADODB.Connection")

objConn.Open "rovider=SQLOLEDB.1;Data Source=(local);uid=sa;pwd=;Initial    Catalog=pubs"

Set objRS = Server.CreateObject("ADODB.Recordset")

objRS.Open "SELECT * FROM Authors", objConn

Dim aResults

aResults = objRS.GetRows

objRS.Close

Set objRS = Nothing

objConn.Close

Set objConn = Nothing

Dim iRows, iCols, iRowLoop, iColLoop, iStop

iRows = UBound(aResults, 2)

iCols = UBound(aResults, 1)

If iRows > (iOffset + iStart) Then

iStop = iOffset + iStart - 1

Else

iStop = iRows

End If

For iRowLoop = iStart to iStop

For iColLoop = 0 to iCols

Response.Write aResults(iColLoop, iRowLoop) & " "

Next

Response.Write "

"

Next

Response.Write "

"

if iStart > 0 then

显示“前 10个”连接

Response.Write "<A HREF=""paging.asp?Start=" & iStart-iOffset & _

"&Offset=" & iOffset & """>前 " & iOffset & "</A>"

end if

if iStop < iRows then

显示“后 10个”连接

Response.Write " <A HREF=""paging.asp?Start=" & iStart+iOffset & _

"&Offset=" & iOffset & """>后 " & iOffset & "</A>"

end if

%>

(大家还可以看到更多的使用Recordset方法的列子)

第二种方法:

这个也不能说是第二种了,因为它不适合ACCESS,通过 MS SQL的存储过程。

假设我们要对数据表MyTable的数据实现分页显示,首先写一个存储过程如下:

CREATE PROCEDURE sp_PagedItems

(

@Page int,

@RecsPerPage int

)

AS

-- 加快表的 插入速度

SET NOCOUNT ON

-- 开始记录 号

DECLARE @RecCount int

SELECT @RecCount = @RecsPerPage * @Page + 1

--创建临时 表

CREATE TABLE #TempItems

(

ID int IDENTITY,

Name varchar(50),

Price currency

)

-- 准备临时 表

INSERT INTO #TempItems (Name, Price)

SELECT Name,Price FROM MyTable ORDER BY Price

-- 求出要查 询的最小ID和最大ID

DECLARE @FirstRec int, @LastRec int

SELECT @FirstRec = (@Page - 1) * @RecsPerPage

SELECT @LastRec = (@Page * @RecsPerPage + 1)

-- 得到实际 的记录,并返回是否还有数据!

SELECT *,

MoreRecords =

(

SELECT COUNT(*)

FROM #TempItems TI

WHERE TI.ID >= @LastRec

)

FROM #TempItems

WHERE ID > @FirstRec AND ID < @LastRec

-- 恢复设置

SET NOCOUNT OFF

在这个存储过程里,我们首先创建一个全部记录的临时表,并增加了一个自动编号的字段ID。这样,不同的记录就有一个递增的唯一标志。

根据当前的页号和每页的记录数,可以计算出每页的最小和最大的ID。从而得到当前页的所有记录。

为了显示的方便,存储过程还计算了 MoreRecords字段,作为显示下一页的判断条件。

利用了这个存储过程的程序代码如下:

<%

每页显示10条

Const iRecordsPerPage = 10

Dim currentPage  当前页号

Dim bolLastPage  在最后一页?

if len(Request.QueryString("page")) = 0 then

currentPage = 1

else

currentPage = CInt(Request.QueryString("page"))

end if

得到当前页的记录

strSQL = "sp_PagedItems " & currentPage & "," & iRecordsPerPage

objRS.Open strSQL, objConn

判断是否在最后一页

if Not objRS.EOF then

if CInt(objRS("MoreRecords")) > 0 then

bolLastPage = False

else

bolLastPage = True

end if

end if

%>

<TABLE BORDER=0 CELLSPACING=1 CELLPADDING=4 ALIGN=CENTER>

<TR><TH COLSPAN=2 BGCOLOR=NAVY>

<FONT SIZE=+1 COLOR=WHITE>

List of Items

</FONT>

</TH></TR>

<%

Do While Not objRS.EOF %>

<TR><TD ALIGN=LEFT BGCOLOR=GRAY>

<%=objRS("Name")%>

</TD><TD ALIGN=CENTER BGCOLOR=GRAY>

<%=FormatCurrency(objRS("rice"))%>
asp学习

</TD></TR>

<%     objRS.MoveNext

Loop %>

</TABLE>

<CENTER>

<%

第一页不 显示“前一页”

if currentPage > 1 then %>

<INPUT TYPE=BUTTON VALUE="<< 前 <%=iMaxRecords%> 记录 "

ONCLICK="document.location.href=thispage.asp?page=<%=currentPage-1%>"> ;

<% end if

最后一页 不显示“后一页”

if Not bolLastPage then %>

<INPUT TYPE=BUTTON VALUE="后 <%=iMaxRecords%> 记录 >>"

ONCLICK="document.location.href=thispage.asp?page=<%=currentPage+1%>"> ;

<% end if %>

</CENTER>

  

爱华网本文地址 » http://www.aihuau.com/a/25101013/156265.html

更多阅读

photoshop学习教程

photoshop学习教程——简介photoshop是一款强大的图片处理软件,用它强大的功能,可以使我们达成很多目的。今天我就来教大家用ps去水印的方法。photoshop学习教程——工具/原料?psphotoshop学习教程——方法/步骤photoshop学习教程 1

四快学习法的价格问题

四快学习法的价格问题——简介随着现在的四快学习法的逐渐在我国的各个区域市场的畅销,很多的学生家长都开始积极地关注到这样的热门的教辅材料,因为很多人都想要了解到四快学习法的神奇之处,想要知道为什么简单的教辅方法就能够改

五笔打字学习教程:1 初学五笔的疑问解答

五笔打字学习教程:[1]初学五笔的疑问解答——简介一步一步地教会你使用五笔输入法打字,最终成为打字高手。请看我的系列经验。五笔打字学习教程:[1]初学五笔的疑问解答——工具/原料五笔输入法五笔打字学习教程:[1]初学五笔的疑问解答

洛克王国,怎样学习百变液化术?

洛克王国的百变液化术要怎么学习呢?洛克王国,怎样学习百变液化术?——学习方法洛克王国,怎样学习百变液化术? 1、点开任务档案-成长之路-魔法之路-液化术课程选择现在就过去! 洛克王国,怎样学习百变液化术? 2、来到实验工坊点击爱因斯坦对

关于儿童学习跆拳道的几个问题

关于儿童学习跆拳道的几个问题——简介练习跆拳道能提高吃苦耐劳的能力.无论练习哪种武术,都是要下苦功夫的,一个动作为了做的标准,有力量、有速度,可能要练习成百上千次,没有吃苦耐劳的精神是做不到的.强身健体.跆拳道也是一项体育竞技,

声明:《asp学习》为网友王牌分享!如侵犯到您的合法权益请联系我们删除