论坛: 网站建设 标题: ASP源代码集(二) 复制本贴地址    
作者: Aoming [aoming]    版主   登录
=============================
无需数据库循环的无级分类代码
=============================


<%@LANGUAGE="VBSCRIPT"%>
<!--数据库表
if exists (select * from dbo.sysobjects where id = object_id(N''[dbo].[Cat]'') and OBJECTPROPE
RTY(id, N''IsUserTable'') = 1)
drop table [dbo].[Cat]
GO

CREATE TABLE [dbo].[Cat] (
[Cat_Id] [int] IDENTITY (1, 1) NOT NULL ,
[Cat_Name] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[Cat_Parent] [int] NULL 
) ON [PRIMARY]
GO
-->
<%
MM_v2boy_STRING = "Driver={Microsoft Access Driver (*.mdb)};DBQ=d:\v2boy.mdb"
Dim rsCat__MMColParam
rsCat__MMColParam = "1"
if (Request.QueryString("Cat_Parent") <> "") then rsCat__MMColParam = Request.QueryString("Cat_Parent")(1) 
''response.write request.querystring & "<hr>" & rsCat__MMColParam
''response.end
%>
<%
set rsCat = Server.CreateObject("ADODB.Recordset")
rsCat.ActiveConnection = MM_v2boy_STRING
rsCat.Source = "SELECT Cat_Id, Cat_Name, Cat_Parent FROM Cat WHERE Cat_Parent = " + Replace(rsCat__MMColParam, "''", "''''") + ""
rsCat.CursorType = 0
rsCat.CursorLocation = 2
rsCat.LockType = 3
rsCat.Open()
rsCat_numRows = 0
%>
<%
Dim Repeat1__numRows
Repeat1__numRows = -1
Dim Repeat1__index
Repeat1__index = 0
rsCat_numRows = rsCat_numRows + Repeat1__numRows
%>
<html>
<head>
<title>??μμ×êá?</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</head>
<body bgcolor="#FFFFFF" text="#000000">
<%
dim request_all
IF request.querystring <> "" then request_all = "&" & request.querystring
%>
<table width="100%" border="0" cellspacing="1" cellpadding="4">
<tr> 
<td><a href="data.asp">??μμ×êá?</a>
<% 
dim i,j,h
j = Request.QueryString("Cat_Parent").Count
For i = 1 to j
''For i = j to 1 step -1
response.write "<a href=data.asp?"
for h = (j - i + 1) to j
''for h = j to (j - i + 1) step -1
Response.Write "Cat_Parent=" & Request.QueryString("Cat_Parent")(h) & "&Cat_Name=" & Request.QueryString("Cat_Name")(h)
if h <> j then
response.write("&")
end if
Next
''response.write "<br>"
response.write ">" & Request.QueryString("Cat_Name")(j-i+1) & "</a> "
Next

response.write "<br>"

While ((Repeat1__numRows <> 0) AND (NOT rsCat.EOF)) 
%>
<% If Not rsCat.EOF Or Not rsCat.BOF Then %>
<a href="data.asp?Cat_Parent=<%=(rsCat.Fields.Item("Cat_Id").Value)%>&Cat_Name=<%=(rsCat.Fields.Item("Cat_Name").Value)%><%=request_all%>"><%=(rsCat.Fields.Item("Cat_Name").Value)%></a> 
<% End If '' end Not rsCat.EOF Or NOT rsCat.BOF %>
<% 
Repeat1__index=Repeat1__index+1
Repeat1__numRows=Repeat1__numRows-1
rsCat.MoveNext()
Wend
%>
</td>
</tr>
</table>
</body>
</html>
<%
rsCat.Close()
%>


地主 发表时间: 11/10 20:55

回复: Aoming [aoming]   版主   登录
=====================
显示左边的n个字符函数
=====================

em 显示左边的n个字符(自动识别汉字)
Function LeftTrue(str,n)
If len(str)<=n/2 Then
LeftTrue=str
else
Dim TStr
Dim&nb
sp;l,t,c
Dim i
l=len(str)
t=l
TStr=""
t=0
for i=1 to l
c=asc(mid(str,i,1))
If c<0 then c=c+65536
If c>255 then
t=t+2
Else
t=t+1
End If
If t>n Then exit for
TStr=TStr&(mid(str,i,1))
next
LeftTrue = TStr
End If
End Function


=======================
页面延迟的两个简单方法
=======================
一、  
<% Response.Buffer = True %>
<%
'' Setup the variables necessary to accomplish the task
Dim Tim
erStart, TimerEnd, TimerNow, TimerWait
'' How many seconds do you want them to wait...
TimerWait = 5
'' Setup and start the timers
TimerNow = Timer
TimerStart = TimerNow
TimerEnd = TimerStart + TimerWait
'' Keep it in a loop for the desired length of time
Do While (TimerNow < TimerEnd)
'' Determine the current and elapsed time
TimerNow = Timer
If (TimerNow < TimerStart) Then
TimerNow = TimerNow + 86400
End If
Loop
'' Okay times up, lets git em outa here
Response.Redirect "nextpage.html" %>

二、

<%
Sub TimeDelaySeconds(DelaySeconds)
SecCount = 0
Sec2 = 0
While SecCount < DelaySeconds + 1
Sec1 = Second(Time())
If Sec1 <> Sec2 Then
Sec2 = Second(Time())
SecCount = SecCount + 1
End If
Wend
End Sub
%>

'' To change delay adjust here
<% TimeDelaySeconds(2) %>


B1层 发表时间: 11/10 20:56

回复: Aoming [aoming]   版主   登录
=============================
用ASP编程控制在IIS建立web站点
=============================


'********************************************************************************** 
'' 创建一个WebServer 
'' 必须参数:WRoot,为创建站点的物理目录;WComment为站点说明;WPort为站点端口;ServerRun为是否自动运行&n
bsp;
'' 当创建成功时返回1,失败时提示退出并返回0,当创建站点成功但启动失败时返回2 
''********************************************************************************** 
''   
''******************注意:WPort为List类型,意为服务器端口,*************** 
''  本函数在IIS5.0上通过,**必须以管理员身份登录** 
'' 端口举例: 
'' Dim WPort,bindlists,createflag,oComputer 
'' oComputer="LocalHost" 
'' binglists=Array(0) 
'' binglists(0)=":80:"''端口号为80 
'' WPort=binglists 
'' createflag=CreateWebServer("D:\myweb","我的家园",WPort,False)''调用建站函数 
''  If creatflag=0 Then 
'' Response.Write "创建站点失败!请确定是否有权限" 
'' ElseIf createflag=1 Then 
'' Response.Write "创建站点成功!" 
'' ElseIf createflag=2 Then 
'' Response.Write "创建站点成功,但启动站点失败,可能端口冲突!" 
'' End If 
''******************************************************************************** 
''关于Ftp站点的创建我已发表在asp版,请有兴趣的朋友自己去查看 

Function CreateWebServer(WRoot,WComment,WPort,ServerRun) 
On Error Resume Next 
Dim ServiceObj,ServerObj,VDirObj 
Set ServiceObj = GetObject("IIS://"&oComputer&"/W3SVC")'' 首先创建一个服务实例 

WNumber=1 
Do While IsObject(ServiceObj.GetObject("IIsWebServer",WNumber)) 
If Err.number<>0 Then 
Err.Clear() 
Exit Do 
End If 
WNumber=WNumber+1 
Loop 

Set ServerObj = ServiceObj.Create("IIsWebServer", WNumber)'' 然后创建一个WEB服务器 

If (Err.Number <> 0) Then'' 是否出错 
''Response.Write "错误: 创建Web服务器的ADSI操作失败!" 
CreateWebServer=0 
Exit Function 
End If 

'' 接着配置服务器 
ServerObj.ServerSize = 1 '' 中型大小 
ServerObj.ServerComment = WComment ''说明 
ServerObj.ServerBindings = WPort ''端口 
ServerObj.EnableDefaultDoc=True 

'' 提交信息 
ServerObj.SetInfo 

'' 最后,建立虚拟目录 
Set VDirObj = ServerObj.Create("IIsWebVirtualDir", "ROOT") 

If (Err.Number <> 0) Then'' 是否出错 
''Response.Write "错误: 创建虚拟目录的ADSI操作失败!" 
CreateWebServer=0 
Exit Function 
End If 

'' 配置虚拟目录 
VDirObj.Path = WRoot 
VDirObj.AccessRead = True 
VDirObj.AccessWrite = True 
VDirObj.EnableDirBrowsing = False 
VDirObj.EnableDefaultDoc=True 
VDirObj.AccessScript=True 
VDirObj.AppCreate2 2 
VDirObj.AppFriendlyName="默认应用程序" 
VDirObj.SetInfo 

If ServerRun = True Then 
ServerObj.Start 
If (Err.Number <> 0) Then '' Error! 
''Response.Write "错误: 起动服务器时出错!请手动启动WebServer "&WComment&"!<br>" 
CreateWebServer=2 
Exit Function 
End If 
End If 
Set VDirObj=Nothing 
Set ServerObj=Nothing 
Set ServiceObj=Nothing 
CreateWebServer=1 
End Function 


B2层 发表时间: 11/10 20:57

回复: Aoming [aoming]   版主   登录
===============================
用ASP和SQL实现基于Web的事件日历
===============================


建立SQL服务器端 
对Web日历而言,我们在服务器端仅需保存表明事件性质的一个文本字符串即可,字符串最长为100个字符。设计源代码如下: 

Calendar.sql
-- 创建表
create table Schedule
(
idSchedule smallint identity primary key,
dtDate smalldatetime not null,
vcEvent varchar(100) not null
)
go
-- 存储过程
create procedure GetSchedule (@nMonth tinyint, @nYear smallint)
as
select idSchedule, convert(varchar, datepart(dd, dtDate)) ''nDay'', vcEvent
from Schedule
where datepart(yy, dtDate) = @nYear and datepart(mm, dtDate) = @nMonth
order by datepart(dd, dtDate)
go
create procedure AddEvent (@vcDate varchar(20), @vcEvent varchar(100))
as
insert Schedule
select @vcDate, @vcEvent 
go
create procedure DeleteEvent (@idSchedule smallint)
as
delete Schedule where idSchedule = @idSchedule
go 

设计ASP客户端 
下图是Web日历的主要用户界面,用户可以看到哪些事件是已安排的。另外,使用底部的链接可以在日历中按月前后翻动。 


ASP的实现代码如下: 

header.asp
<@ LANGUAGE="VBSCRIPT" 
ENABLESESSIONSTATE = False %>
<%
'' 目的:表头包括用来启动所有页的文件
'' 还包括全局函数
Option Explicit
Response.Buffer = True
Response.Expires = 0
sub Doheader(strTitle)
%>
<html>
   <head>
   <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=gb2312">
   <title>Event Calendar - <%= strTitle %></title>
   </head>
   <body bgcolor="white" link="blue" alink="blue" vlink="blue">
   <basefont face="Verdana, Arial">
   <center><h1>Event Calendar</h1>
   <h3><%= strTitle %></h3>
<%
end sub
function GetDataConnection()
dim oConn, strConn
Set oConn = Server.CreateObject("ADODB.Connection")
strConn = "Provider=SQLOLEDB; Data Source=adspm; Initial Catalog=TeamWeb; "
strConn = strConn && "User Id=TeamWeb; Password=x"
oConn.Open strConn
set GetDataConnection = oConn
end function 
%> 

利用ADO,我们可以很容易地将 ASP 页面与 SQL 数据库相连接。首先我们要创建一个到数据库的连接。为了获得记录集,我们要调用 Connection 对象的 Execute 方法,将希望执行的命令的文本字符串传入,一旦有了记录集,就可以在其中循环。header.asp 包含获得数据连接的函数,这意味着如果数据源有变化,我们只有一个位置需要编辑连接信息(服务器、用户和口令)。请注意,作为结果,我们必须在函数的末尾使用 set 命令传出新连接。 

优化性能 
ASP使建立Web页面变得十分容易,但如果想建立一个可以适应大量用户的站点,你就需要仔细考虑编码。下面笔者将为读者介绍增强基于Web日历可伸缩性的几种方法,这些方法也可用于提高任何基于ASP的Web站点的性能。 

1.SQL优化 

提高站点性能的一个简单方法是给 Schedule表的date字段添加一个索引,这样,它会在给定日期之间进行查找,因而将加快 GetEvents的存储过程。 

对于小型站点,我们可以将 SQL 与 IIS 安装在同一服务器上,一旦站点访问量开始增长,我们可将 SQL 移动到其自身的服务器上,当访问量进一步增长时,我们可以添加均指向同一 SQL 服务器的多个 IIS 服务器。如果 SQL 服务器的通信量过度增长时,还可以将数据分割到不同的服务器上,我们可以将奇数月份分配到一台服务器,将偶数月份分配到另一台服务器上,当然,这需要修改 header.asp 中的 GetDataConnection,以便它为你提供基于此月份的正确连接。 

2.ASP 优化 

ASP 解释的主要优化方法将是利用高速缓存页面,以便无需每次读取都对它们进行解释。做到这一点的最简单的方法是借助 ASP Application 对象。要做到这一点,你只需将HTML保存到含有月份和年份名称的应用程序变量(例如 Calendar07-2000)中。然后,当显示 Event Calendar 页时,你首先检查一下看看日历是否已经保存在应用程序变量中,如果是,则只需检索它,这种方式会大大加快网站的查询过程。下面的代码显示了这个工作过程: 

<<do header>>
ShowCalendar(nMonth, nYear)
<<do Footer>>
sub ShowCalendar(nMonth, nYear)
if Application("Calendar" && nMonth && "-" && nYear) = "" then
<<Build Calendar>>
Application("Calendar" && nMonth && "-" && nYear) = <<Calendar>>
End if
Response.Write Application("Calendar" && nMonth && "-" && nYear) 
End sub 

当然,在 Events.asp 页更改某个月份的事件时,你需要清空该月份的应用程序变量,以便反映这些事件的更改状况。 

安全性 
有几种方法可实现此站点上的安全性。对于 Intranet 站点,基于Windows NT的验证是最容易设置的,其原因是你的用户将很可能已经登录到网络。你可让所有用户查看 Event Calendar 页,但是只有管理员能访问Add/Remove Events 页。 

如果关心审计,你可以容易地修改 AddEvent 和 DeleteEvent 过程将其信息保存到审计表中。你还可以确保 IIS 为每个页命中的查询字符串和用户进行日志记录,然后逐个分析日志以确定何人于何时做了什么,这是非常简单的。

B3层 发表时间: 11/10 20:59

回复: Aoming [aoming]   版主   登录
=============================
用ASP技术编制隐藏用户密码程序
=============================

    这段ASP程序(名字为DEFAULT.ASP)所实现的功能是对数据库的查询操作,仅取其隐藏用户名和密码的一部分进行说明。

<% WEB_USER =Request("WEB_USER") ''WEB用户名 %>

<% WEB_USER_PASSWD =Request("WEB_USER_PASSWD") ''WEB用户的密码 %>

<% ''将WEB用户名和密码加密,方法是,将变量值从左至右每个字符的ASCII码加32,生成新的字符串,当执行到此时,地址行上显示出的,是“加密”以后的用户名和密码,而不是真正的用户名和密码,达到保密目的% >

<% TEMP1="" % >

<% For i=1 To Len(WEB_USER) %>

<% TEMP2=Mid(WEB_USER,i,1) %>

<% TEMP2=Chr(Asc(TEMP2)+32) %>

<% TEMP1=TEMP1&TEMP2 %>

<% Next %>

<% WEB_USER=TEMP1 %>

<% TEMP1="" %>

<% For i=1 To Len(WEB_USER_PASSWD) %>

<% TEMP2=Mid(WEB_USER_PASSWD,i,1) %>

<% TEMP2=Chr(Asc(TEMP2)+32) %>

<% TEMP1=TEMP1&TEMP2 %>

<% Next %>

<% WEB_USER_PASSWD=TEMP1 %>

<%''建立和数据库的连接,定义ODBC名字(odbcname)、ORACLE用户名(orauser)及口令(orauser_passwd)%>

<%Set Conn = Server.CreateObject("ADODB.Connection")

Conn.Open "odbcname","orauser","orauser_passwd"

%>

<% ''建立查询语句-SQL语句%>

<%

var_sql="SELECT * FROM verifytab,dw_tab where verifytab.user_pd=''"&WEB_USER_PASSWD&"''"

Set RS = Conn.Execute(var_sql) ’符合条件的记录生成于RS之中%>

<%''将用户名和口令翻译成正确的 ,但此时地址栏里显示不出来,达到了保密要求%>

<% TEMP1="" %>

<% For i=1 To Len(WEB_USER) %>

<% TEMP2=Mid(WEB_USER,i,1) %>

<% TEMP2=Chr(Asc(TEMP2)-32) %>

<% TEMP1=TEMP1&TEMP2 %>

<% Next %>

<% WEB_USER=TEMP1 %>

<% TEMP1="" %>

<% For i=1 To Len(WEB_USER_PASSWD) %>

<% TEMP2=Mid(WEB_USER_PASSWD,i,1) %>

<% TEMP2=Chr(Asc(TEMP2)-32) %>

<% TEMP1=TEMP1&TEMP2 %>

<% Next %>

<% WEB_USER_PASSWD=TEMP1 %>

<% ''验证输入的WEB用户名和口令是否正确,若是,往下进行,否则,返回到default.htm调用,它是IIS默认的调用文件%>〈〉

<%If WEB_USER="superuser" and WEB_USER_PASSWD="superuserpd" Then

else

If RS.EOF Then

Response.Redirect("default.htm")

End If

End If

%>

<%''下边是用FRONTPAGE 98 设计的FORM界面,内容省略%>

<html>

<head>

……



B4层 发表时间: 11/10 21:01

回复: Aoming [aoming]   版主   登录
=========================
在ASP中改善动态分页的性能
=========================

    解决上述问题主要有两种途径:一种途径是将查询条件相对固定,利用相对固定的查询条件对原始数据进行加工,生成一个小数据量的中间库,每次查询都对中间库进行操作。这样虽然会提高程序的性能,但会影响程序的灵活性,而且 Server端还需定时对原始数据进行加工维护。另一个途径是在Server端保存查询的结果。这样虽然不能改善查询的性能,但Client端换页时Server端能够很快响应。第一种途径的实现比较简单,本文介绍第二种途径的实现方法。 

    实现方法 
    将Server端的查询结果保存在一个动态数组中,即在 Session_OnStart过程中声明一个二维的动态数组。当Server端收到Client端提交的申请后,首先判断申请是条件查询还是换页,如是条件查询则判别查询条件是否与上次提交的查询条件不同,如不同则执行查询,将查询结果保存在该数组中,然后向Client端返回第一页的内容,否则直接从该数组中返回相应页的内容。 
程序实现 
    1.定义二维数组及其他变量 
Sub Session_OnStart
dim TempDb() 
redim Preserve TempDb(1,2) 
session(“StoredArray") = TempDb 
’定义一个Session数组
session(“iPageCount")=0
session(“iPageNo")=0
......
End Sub

    2.调用存储过程返回数据 

Sub GetRecordSet(strBbmc,strKssj ,
strZzsj ,strNodeCode ,strFxzl )
''参数为报表名称和各个限制条件
select case strBbmc
case “交易汇总表"
strCnn=“PROVIDER=MSDASQL;dsn=sqldb;
uid=sa;pwd=123456;database=vlog;"
Set objcnn=Server.CreateObje(“ADODB.Connection")
objcnn.CommandTimeout = 9999999
objcnn.ConnectionTimeout = 99999999
objcnn.CursorLocation = adUseClient
objcnn.Open strCnn ''打开连接 
Set objRs =Server.CreateObject
(“ADODB.Recordset") 
objRS.PageSize = iPageSize
objRS.CacheSize = iPageSize
objRs.Open “sszhatmlog ‘“ & strKssj & "'' ,
‘“ & strZzsj & "'', ‘“ & strNodeCode & "'' ,
‘“ & strFxzl & "''",objcnn,adOpenStatic ,
adLockReadOnly,1
’执行存储过程返回查询结果
......
End Sub 

    3.将查询结果保存到动态数组 

Sub SaveRecordSet() 
if objRs.EOF = false then
objRs.movelast
session(“iRowCount") = objRs.recordCount
session(“iFieldCount") = objRs.Fields.Count
session(“iPageCount") = objRs.pagecount
redim Preserve TempArray(session
(“iRowCount"),session(“iFieldCount")) 
’TempArray是一个二维动态数组, 
根据记录集大小重新定义其大小
objRs.MoveFirst
iCount=0 
do while objRs.EOF=false
iCount = iCount + 1 
for i= 1 to session(“iFieldCount")
TempArray(iCount,i)=objRs.Fields.Item
(i-1).value
next 
objRs.MoveNext 
loop
session(“StoredArray") = TempArray 
objRs.Close 
else
session(“iPageCount") = 0
end if
End Sub

    4.显示记录内容 

Sub ShowRecord()
......
LocalArray=session(“StoredArray") 
iShowTotal=(iPageCurrent-1)*iPageSize+1 
iRowLoop = 1
do while iRowLoop < = iPageSize and iShowTotal
< = session(“iRowCount")
Response.Write(“< TR >") 
for i = 1 To session(“iFieldCount")
Response.write(“< TD >" 
& LocalArray(iShowTotal,i)) Next
Response.Write(“< /TR >") 
iShowTotal = iShowTotal + 1 
iRowLoop = iRowLoop + 1 loop
Response.Write(“< /TABLE >") 
if iPageCurrent < > 1 and 
iPageCurrent < session
(“iPageCount") then
% >
< center >< A HREF=“db_pag.asp?page=< %= 
iPageCurrent - 1 % >" >前一页< /A >< A HREF=
“db_pag.asp?page=< %= iPageCurrent + 1 % >" >
后一页< /A >< /center > 
< % 
else 
if iPageCurrent < > 1 then
% >
< center >< A HREF=“db_pag.asp?page=< %=
iPageCurrent - 1 % >" >前一页 < /A >< /center > 
< %
end if
if iPageCurrent < session(“iPageCount")then
% >
< center >< A HREF=“db_pag.asp?page=
< %= iPageCurrent + 1 % >" >后一页 < /A >
< /center >
< %
end if
end if
End Sub

    5.主程序 

if Request.QueryString(“page") = “" then 
’提交查询申请并且查询条件与上一次不同
......
call GetRecordSet(strBbmc,strKssj,strZzsj,
strNodeCode,strFxzl) 
call SaveRecordSet 
Else
iPageCurrent=CInt(Request.QueryString(“page"))
strKssj=session(“strKssj")
end if 
if session(“iPageCount") = 0 then 
Response.Write “抱歉!没有满足条件的记录"
Response.Write “< Br >"
else 
call showrecord() 
end if

    结束语 
    本程序的关键在于Session数组的定义及其赋值的实现,通过应用Session数组可以提高处理大量数据的应用程序的性能
 

B5层 发表时间: 11/10 21:02

回复: darkangel [eson]   论坛用户   登录
好呀!!!
i am searching it.

B6层 发表时间: 11/13 11:58

回复: xinnv [xinnv]   论坛用户   登录
从国外站上弄的,好啊支持,不过要多优化啊

B7层 发表时间: 04-01-01 04:27

论坛: 网站建设

20CN网络安全小组版权所有
Copyright © 2000-2010 20CN Security Group. All Rights Reserved.
论坛程序编写:NetDemon

粤ICP备05087286号