|
作者: 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号