FDS’s Blog

2009年2月20日

用FSO组件对文件操作(三)

Filed under: ASP — 标签:, — FDS @ 10:14

一,fso.GetFile
提取文件相应的 File 对象

1,getfile.asp

<%
whichfile=Server.MapPath(“cnbruce.txt”)
Set fso = CreateObject(“Scripting.FileSystemObject”)
Set f1 = fso.CreateTextFile(whichfile,true)
f1.Write (“This is a test.My Name is cnbruce.”)
f1.Close
Set f2 = fso.GetFile(whichfile)
 
s = ”文件名称:” & f2.name & ”<br>”
s = s & ”文件短路径名:” & f2.shortPath & ”<br>”
s = s & ”文件物理地址:” & f2.Path & ”<br>”
s = s & ”文件属性:” & f2.Attributes & ”<br>”
s = s & ”文件大小: ” & f2.size & ”<br>”
s = s & ”文件类型: ” & f2.type & ”<br>”
s = s & ”文件创建时间: ” & f2.DateCreated & ”<br>”
s = s & ”最近访问时间: ” & f2.DateLastAccessed & ”<br>”
s = s & ”最近修改时间: ” & f2.DateLastModified
response.write(s)
%>

其效果正如右键某文件,看到的具体属性信息。
其中Attributes返回的数值“32”表示:(Archive)上次备份后已更改的文件。可读写。

其它值附录如下:

 
Normal        0      普通文件。               没有设置任何属性。 
ReadOnly      1      只读文件。               可读写。 
Hidden        2      隐藏文件。               可读写。 
System        4      系统文件。               可读写。 
Directory     16     文件夹或目录。           只读。 
Archive       32     上次备份后已更改的文件。 可读写。 
Alias         1024   链接或快捷方式。         只读。 
Compressed    2048   压缩文件。               只读。 

二,file.move
作用将指定的文件或文件夹从某位置移动到另一位置。其实该方法仍然属于fso.GetFile后的一个应用。

2,movefile.asp

<%
whichfile=Server.MapPath(“cnbruce.txt”)
Set fso = CreateObject(“Scripting.FileSystemObject”)
Set f1 = fso.CreateTextFile(whichfile,true)
f1.Write (“This is a test.My Name is cnbruce.”)
f1.Close
Set f2 = fso.GetFile(whichfile)
f2.Move ”C:\”
%>
<a href=”C:\”>查看下有没有</a>

简单的剪切粘贴的功能实现。

三,File.Copy
同样属于fso.GetFile后的一个应用。就只是单纯地拷贝文件到某位置。

3,copyfile.asp

<%
whichfile=Server.MapPath(“cnbruce.txt”)
Set fso = CreateObject(“Scripting.FileSystemObject”)
Set f1 = fso.CreateTextFile(whichfile,true)
f1.Write (“This is a test.My Name is cnbruce.”)
f1.Close
Set f2 = fso.GetFile(whichfile)
f2.Copy ”D:\”
%>
<a href=”D:\”>查看下有没有</a>

和本ASP页面同在目录下的cnbruce.txt文件依然存在。

四,file.Delete
很显然,就是直接删除文件了。

4,delfile.asp

<%
whichfile=Server.MapPath(“cnbruce.txt”)
Set fso = CreateObject(“Scripting.FileSystemObject”)
Set f1 = fso.CreateTextFile(whichfile,true)
f1.Write (“This is a test.My Name is cnbruce.”)
f1.Close
Set f2 = fso.GetFile(whichfile)
f2.move ”d:\”
Set f3 = fso.GetFile(“d:\cnbruce.txt”)
f3.delete 
%>
<a href=”d:\”>查看下是没有该文件的</a>

用FSO组件对文件操作(二)

Filed under: ASP — 标签:, — FDS @ 10:13

学会了FSO提取文件值,也学会了将信息输入到文件中,那下面就再来应用应用下。

不知道你有没有这样的习惯:看到一个文件,不自觉的右键选择用记事本打开。呵呵,几乎没有哪个文件是不可以的。所以现在,可以默认所有文件都是文本,只是后缀名不同而已;那么也就是说,现在可以提取任一文件的内容信息。OK,就来想象一下:

1,提取一个文件的路径(采用file按钮进行查找定位)
2,将该路径文件打开,并读取所有行
3,显示读取的信息

一、viewcode.asp

<%
Function ShowCode(filename) 
    Set fso = Server.CreateObject(“Scripting.FileSystemObject”)
    Set cnrs = fso.OpenTextFile(filename, 1)
    While Not cnrs.AtEndOfStream
        rsline = cnrs.ReadLine
        rsline = server.HTMLEncode(rsline)
        Response.Write(rsline & ”<br>”)
    Wend
end Function
%>

<form action=”viewcode.asp” method=”post”>
输入文件名<input type=”file” name=”filename”>
<input type=”submit” value=”查看源程序”>
</form>

<%
file=request.form(“filename”)
response.write (file & ”源程序如下<hr>”)
If trim(file)<> ”" then
  Call ShowCode(file)
End If
%>

以上程序调试时,可以选择html,asp页面,也可以打开任一应用程序等。

定义的ShowCode函数,主要作用是打开、读取并显示文件中所有信息内容。注意添加了server.HTMLEncode(rsline),针对含有标准HTML代码的文件。

显示文件中所有行即用一条件循环进行遍历显示了。
While Not cnrs.AtEndOfStream

Wend

接着,下面的这个例题具体就涉及open方法的问题了,还记得?正常情况之下打开文件是采用fso.OpenTextFile(“c:\testfile.txt”,1),参数1的作用是:以只读模式打开文件。不能对此文件进行写操作。如果现在已经存在一文件,需要进行追加写入,则该怎么办呢?简单,参数为8即可。

PS:这里还有一种读取的方法。

<%
whichfile=server.mappath(“test.txt”)
Set fso = CreateObject(“Scripting.FileSystemObject”)
Set txt = fso.OpenTextFile(whichfile,1)
rline = txt.ReadAll
rline=replace(Server.HtmlEncode(rline),Chr(13),”<br>”)
Response.Write rline
txt.Close
%>

这有什么用呢?呵呵,亚玛逊的网络故事接龙就是如此:能接龙就需要首先要显示原有故事,然后自己添加故事写入文件。这其中的写入文件最讲究的就是追加写入了。所以下面就可以实现。

二、story.asp

<%
If not request.Form(“NextLine”)=”" then
  Set fso=Server.CreateObject(“Scripting.FileSystemobject”)
  textfile1=Server.MapPath(“story.txt”)
  set cnrs=fso.OpenTextFile(textfile1,8)
  cnrs.WriteLine(Request.Form(“NextLine”))
  cnrs.Close
end if
%>
故事如下:
<%
Set fso=Server.CreateObject(“Scripting.FileSystemObject”)
textfile1=Server.MapPath(“story.txt”)
set cnrs=fso.OpenTextFile(textfile1,1)
while not cnrs.AtEndOfStream
  Response.Write ”&nbsp;” & cnrs.ReadLine
wend
cnrs.close
%>
<hr>
<form method=”post” action=”story.asp”>
请输入这个故事的新行:<input name=”NextLine” type=”text” size=”70″>
<input type=”submit” value=”提交”>
</form>

整个就是一很简单的读取信息和加入信息的混合利用,相信有了前面的基础看懂应该不成问题。当然还缺少个story.txt文件,里面写好故事开头就可以了。


再下面,继续来,该侧重点主要就是练习一些函数的使用技巧了。

1,instr函数:返回某字符串在另一字符串中第一次出现的位置。
比如现在查找字母“A”在字符串“A110B121C119D1861”中第一次出现的位置,则可以

[Ctrl+A 全部选择 提示:你可先修改部分代码,再按运行]

同样字母“B”的位置也就能确定。现在就来最关键的:提前字母“A”和“B”中间的值“110”。
还记得mid函数吗?mid函数的主要作用是:从字符串中返回指定数目的字符。
比如现在的“110”则应该是从字符串的第2位取得3个单位的值。

[Ctrl+A 全部选择 提示:你可先修改部分代码,再按运行]

但设想一下:如果不是“110”,而是“1100”,那是不是要提取4位……这样就显出程序的不够完美。
所以继续思考:所提取的值,永远是在字母“A”后面的,且值也永远是在字母“A”和“B”之间的,那么只要分别提取出“A”、“B”的位置,则中间数值的起始位应是字母“A”位+1,中间数值的长度应是字母“B”位-字母“A”位-1
那么现在就可以让程序完美起来:


[Ctrl+A 全部选择 提示:你可先修改部分代码,再按运行]

OK,那么现在你也就完全可以把字母“B”、“C”、“D”后面的值一一提取了。
当然需要注意的就是“D”后面有几位怎么取呢?采用字符串总长度-字母D所在位置数就可以了。


[Ctrl+A 全部选择 提示:你可先修改部分代码,再按运行]

用到现在,你也许确实学到了不少,但也许会提出疑问:这个放在FSO文件操作里有什么作用呢?
那下面才是我们的正题:用FSO进行简单的文本投票。

投票页面首要的就是显示各类项目的投票数,并相应赋于某个变量。然后判断本次投票的选相,相对应地将投票数值加1,完毕后再将所有值继续写入文本。

1,一个HTML表单页website.html
以做投票点击的平台。

[Ctrl+A 全部选择 提示:你可先修改部分代码,再按运行]

2,接受表单页值的result.asp

<%
whichfile=server.mappath(“site.txt”)
set fso=createobject(“Scripting.FileSystemObject”)
set thisfile=fso.opentextfile(whichfile)
my_string=thisfile.readline

a_num = instr(my_string,”A”)
b_num = instr(my_string,”B”)
c_num = instr(my_string,”C”)
d_num = instr(my_string,”D”)
total_num = len(my_string)

a_value = mid(my_string,a_num+1,b_num-a_num-1)
b_value = mid(my_string,b_num+1,c_num-b_num-1)
c_value = mid(my_string,c_num+1,d_num-c_num-1)
d_value = mid(my_string,d_num+1,total_num-d_num)

select case request.form(“website”)
    case ”A”: avalue=a_value+1
    case ”B”: bvalue=b_value+1
    case ”C”: cvalue=c_value+1
    case ”D”: dvalue=d_value+1
end select

mynew_string=”A” & cstr(a_value) & ”B” & cstr(b_value) & ”C” & cstr(c_value) & ”D” & cstr(d_value)
set newfile=fso.createtextfile(whichfile)
newfile.writeLine(mynew_string)
newfile.close
set fso=nothing
%>
当前投票:<br>
cnbruce.com:<%=a_value%><br>
blueidea.com:<%=b_value%><br>
it356cn.com:<%=c_value%><br>
5d.cn:<%=d_value%><br>
<a href=”website.html”>返回继续</a>

有了上面函数的基础,看这个应该不是很难的

3,最后不要忘了的记数文件site.txt

用FSO组件对文件操作(一)

Filed under: ASP — 标签:, — FDS @ 10:10
FSO中除了可以对驱动器、文件夹的操作以外,功能最强大的就是对文件的操作了。它可以用来记数、内容管理、搜索还可生成动态HTML页面等等。

一、fso.OpenTextFile
无需多说,fso.OpenTextFile就是打开某个文件了,一般情况之下是打开的txt文本文件。所以首先我们先建立一个txt文件,然后通过FSO来读取其中的内容。

1,info.txt

 

name:cnbruce
sex:male
建立了该文件,下面再做个ASP页面,当然最好两个文件是在同一目录下。

2,opentxt.asp

 

<%
whichfile=server.mappath(“info.txt”)
Set fso = CreateObject(“Scripting.FileSystemObject”)
Set txt = fso.OpenTextFile(whichfile,1)
rline = txt.ReadLine
rline = rline & ”<br>” & txt.ReadLine
Response.Write rline
txt.Close
%> 

需要注意:无论是通过FSO打开驱动器、打开文件夹、打开文件,以及以后要接触到的打开数据库,都只能是打开绝对物理路径地址。但一般情况是上传到空间服务商那,不能很直接地了解到自己文件的所在位置,所以强烈推荐使用server.mappath方法:平台移植性强,适用性强。

CreateObject(“Scripting.FileSystemObject”)建立了FSO组件的连接,fso.OpenTextFile(whichfile,1)打开了info.txt该文件。参数“1”表示“ForReading:以只读方式打开文件。不能写这个文件。”,其他还有参数“2”表示“ForWriting:以写方式打开文件”,参数“8”表示“ForAppending:打开文件并从文件末尾开始写”。

打开了该文件,接下来是不是要显示文件中的内容?那就通过txt.ReadLine方法读取文本中的一整行,如果需要继续读取下一行,则继续使用txt.ReadLine方法。当然初此还有其它的读取方法,比如txt.Read(7)读取指定数量的字符,txt.ReadAll返回文本中的全部内容。

二、fso.CreateTextFile
如fso.CreateFolder建立文件夹般,fso.CreateTextFile则是建立文件了。

3,creattxt.asp

 

<%
whichfile=server.mappath(“info.txt”)
Set fso = CreateObject(“Scripting.FileSystemObject”)
Set MyFile = fso.CreateTextFile(whichfile,True)
MyFile.WriteLine(“My Name Is CN-Bruce”)
MyFile.WriteLine(“My Sex Is Male”)
MyFile.Close
%>
<a href=”opentxt.asp”>查看内容</a> 

本次建立的文件是上一info.txt文件,fso.CreateTextFile(whichfile,True)其中的参数true即表示能覆盖已有文件。建立后需要向里面添加数据就采用“MyFile.WriteLine”了。

那现在就可以建立一个简单的文本记数器了,还记得以前的记数?:1,通过application、session、global.asa进行记数;2,通过Counter组件进行记数。但两者都有通病,就是不能保存,如果服务器重新启动后,是不是所有记数全部清空了呢:)那现在就可以使用文本来记录数据了,即使重启,下次提取的也还是该文件。

试验:文本计数器

首先建立一记数的文本文件counter.txt,设定初始值为“1”

4,counter.txt

 

1
接着是记数的ASP文件,功能是显示文本的记数,本做加1的记数,然后还要将新的记数写入文本文件。

5,txtcount.asp

 

<%
whichfile=server.mappath(“counter.txt”)
‘打开文件并将其值读取,最后关闭连接释放资源
set fso=createobject(“Scripting.FileSystemObject”)
set openfile=fso.opentextfile(whichfile,1)
visitors=openfile.readline
openfile.close
‘页面显示记数内容并做加1运算
response.write ”您是本页的第”&visitors&”位访客”
visitors=visitors+1
‘将新的数值添加写入到文本,最后关闭所有连接释放资源
set creatfile=fso.createtextfile(whichfile)
creatfile.writeLine(visitors)
creatfile.close
set fso=nothing
%> 

那根据这个可以继续地扩展内容:比如让记数用数字图片显示。当然前提就是你需要0-9的10张记数图片,并将此图片放于img文件夹中。
下为一增强的txtcount.asp内容代码

 

<%
whichfile=server.mappath(“counter.txt”)set fso=createobject(“Scripting.FileSystemObject”)
set openfile=fso.opentextfile(whichfile,1)
visitors=openfile.readline
openfile.close
CountLen=len(visitors)
response.write ”您是本页的第”

for i=1 to 6-countLen        ’表示最大值999999
 response.write ”<img src=img/0.gif></img>”
next 
for i=1 to countlen
 response.write ”<img src=img/” & mid(visitors,i,1) & ”.gif></img>”
next
response.write ”位访客”

visitors=visitors+1
set creatfile=fso.createtextfile(whichfile)
creatfile.writeLine(visitors)
creatfile.close
set fso=nothing
%>

 

本程序中采用的是mid函数,该函数的作用是返回某字符串中从第几位字符开始的几个字符。格式即为:Mid(string,start,length)

[Ctrl+A 全部选择 提示:你可先修改部分代码,再按运行]

2009年1月10日

数据库用convert进行日期格式转换

Filed under: ASP,PHP,数据库 — 标签: — FDS @ 14:57

如何在数据库中转换各种日期格式呢?只要在convert中指定日期格式的代号就够了,非常简单方便

如:
select convert(char(20),getdate(),101)
select emp_id,convert(char(20),hire_dt,101) from employee

以下是格式代号提供出来

日期格式          代号
——————– ———–
04/05/2000          101

——————– ———–
2000.04.05          102

——————– ———–
05/04/2000          103

——————– ———–
05.04.2000          104

——————– ———–
05-04-2000          105

——————– ———–
05 Apr 2000         106

——————– ———–
Apr 05, 2000         107

——————– ———–
11:33:24           108

——————– ———–
Apr 5 2000 11:33:24     109

——————– ———–
04-05-2000          110

——————– ———–
2000/04/05          111

——————– ———–
20000405           112

关于ASP缓存技术

Filed under: ASP — FDS @ 14:50

使用ASP中的缓存技术可以很大程度上提高你的网站性能,其实这些实现方法是非常的简单,它将说明如何在服务器上的缓存是如何工作以及你如何使用一种被称为断开连接的ADO连接技术。
在介绍这些技术之前先说明一下到底什么是ASP的缓存技术。
所谓缓存其实就是在内存中开辟一个用来保存数据的空间,使用缓存你就不用频繁的访问你保存在硬盘上的数据了,灵活的使用缓存你就免去了心疼的看着可怜的硬盘饱受读数据时的折磨了。当你一旦执行了一个查询动作,并且将查询结果放入缓存中后,你就可以很迅速的重复访问这些数据了。而如果你不把数据放入缓存的话,当你再次执行这个查询时,服务器会将进程耗费在从数据库中获取并排序上了。
当数据保存在缓存中时,再次查询时耗费的时间主要是在显示数据的时间上了。也就是说,我们不应该把经常需要改变的数据放到服务端的缓存中,我们应该把改变少,但是又需要经常访问的数据放到缓存中。

现在我们先讨论ASP在服务端使用缓存的技术,过会再讨论ASP如何在客户端使用
缓存的技术。
当你有大量的数据(静态的,就是说变动比较少的)需要显示给客户端时,你就可以考虑使用服务端的缓存技术了。这种技术尤其适用于那些显示风格一致性比较强的网站(呵呵,对于非主流的网站可不好用的说。)
其实实现方法特别的简单,大家只要看看下面这个简单的例子就明白了。
这是一个用来显示书籍分类的例子程序
DisplayBooks.ASP文件:

< %@ LANGUAGE=JavaScript % >
< html >
< body >
< form method=post >
书籍分类; < %= getBooksListBox() % >
< p>
< input type=submit >

< %
function getBooksListBox()
{
BooksListBox = Application(“BooksListBox”)
if (BooksListBox != null) return BooksListBox;
crlf = String.fromCharCode(13, 10)
BooksListBox = “< select name=Books>” + crlf;
SQL = “SELECT * FROM Books ORDER BY Name”;
cnnBooks = Server.CreateObject(“ADODB.Connection”);
cnnBooks.Open(“Books”, “Admin”,”");
rstBooks = cnnBooks.Execute(SQL);
fldBookName = rstBooks(“BookName”);
while (!rstBooks.EOF){
BooksListBox = BooksListBox + ” < option>” +
fldBookName + “” + crlf;
rstBooks.MoveNext();
}
BooksListBox = BooksListBox + “”
Application(“BooksListBox”) = BooksListBox
return BooksListBox;
}
% >
很简单把,其实就是用了很简单的Application技术,而且就一句话的不同:
Application(“BooksListBox”) = BooksListBox
你可以验证一下你就会发现服务器上的请求数量会降低不少的。这种情况尤其适合与那些更新不是很频繁的网站内容,例如你一天(或则很长时间)只更新一次。

下面再讨论一种客户端的缓存技术这种技术也叫断开连接的ADO连接技术(翻译水平太次,听上去怎么这么别扭)。这种技术主要使用在用来保存用户个人信息,例如用户的密码,代号等等上面。它主要使用了ADO的一些属性。同时也回答了一些网友曾经提到过的能否在Applocation中使用ADO对象的问题。解释不清楚,下面让代码来发言:
文件GLOBAL.ASA:
< !–METADATA TYPE=”TypeLib” FILE=”C:\Program Files\Common Files\system\ado\msado15.dll”– >
< SCRIPT LANGUAGE=VBScript RUNAT=”Server” >
Sub Application_OnStart
SQL = “SELECT UserName, Password FROM UserInfo”
cnnUsers = “DSN=User”
Set rsUsers = Server.CreateObject(“ADODB.Recordset”)
‘注意下面这两句话,就是用来实现那个叫可用的断开连接的ADO技术
rsCustomers.CursorLocation = adUseClient
rsCustomers.Open SQL, cnnAdvWorks, adOpenStatic, AdLockReadOnly
‘ 断开RecordSet的和数据库的连接
rsCustomers.ActiveConnection = Nothing
Set Application(“rsCustomers”) = rsCustomers
End Sub

文件Users.ASP
< %
‘Clone方法使得每个用户拥有自己的一个RecordSet集合
Set yourUsers = Application(“rsUsers”).Clone
Set UserName = yourUsers(“UserName”)
Set Password = yourUsers(“Password”)
Do Until yourUsers.EOF
% >
用户姓名:< %= UserName % > 用户密码:< %= Password % >
< %
yourUsers.MoveNext
Loop
% >

(出处:热点网络)

用CDONTS发送邮件的ASP函数

Filed under: ASP — FDS @ 14:39

一个用CDONTS发送邮件的ASP函数,看看实现方法。
<%
‘发送普通邮件
SendMail “admin@ny.com”, “iamchn@263.net”, “Normal Mail!”, “Please check the attatchment!”, 2, 0, “C:\Love.txt”

‘发送HTML邮件
Dim m_fso, m_tf
Dim m_strHTML

Set m_fso = Server.CreateObject(“SCRIPTING.FILESYSTEMOBJECT”)
Set m_tf = m_fso.OpenTextFile(“C:\Mail.htm”, 1)
m_strHTML = m_tf.ReadAll

‘Write m_strHTML
Set m_tf = Nothing
Set m_fso = Nothing

SendMail “admin@ny.com”, “iamchn@263.net”, “HTML Mail!”, m_strHTML, 2, 1, Null

‘参数说明
‘strFrom : 发件人Email
‘strTo : 收件人Email
‘strSubject : 信件主题
‘strBody : 信件正文
‘lngImportance : 信件重要性
‘ : 0 – 低重要性
‘ : 0 – 中等重要性(默认)
‘ : 0 – 高重要性
‘lngAType : 信件格式
‘ : 为1时将邮件正文作为HTML(此时可以发送HTML邮件)
‘strAttach : 附件的路径
Sub SendMail(strFrom, strTo, strSubject, strBody, lngImportance, lngAType, strAttach)
Dim objMail

Set objMail = Server.CreateObject(“CDONTS.NEWMAIL”)
With objMail

.From = strFrom
.To = strTo
.Subject = strSubject
.Body = strBody
.Importance = lngImportance

If lngAType = 1 Then
.BodyFormat = 0
.MailFormat = 0
End If

If IsEmpty(strAttach) = False And IsNull(strAttach) = False Then
.AttachFile strAttach
End If

.Send
End With
Set objMail = Nothing
End Sub
%>

2009年1月5日

ASP的CACHE技术

Filed under: ASP — FDS @ 20:49

ASP中最好的办法是用编程实现定时刷新Cache,也就是说给Application中储存的设一个过期时间。当然,在ASP中Application对象没有这样一个ExpireTime属性。这需要用程序实现。

ASP:default.asp

<%@Language=VBScript%>
<%
Option  Explicit%>
<%Response.Buffer=
True%>
<!–#include file = “conn.asp”–>
<!–#include file = “GetCache.asp”–>

<HTML>
    <HEAD>

        <TITLE>ASP Cache演示</TITLE>
        <META
HTTP-EQUIV=“Content-Type” CONTENT=“text/html; charset=gb2312″>
    </HEAD>
    <BODY>

    <h4>每隔10秒刷新Cache</h4>
    <%
    response.Flush
    GetHTMLStream
    response.Write
    HTMLStream
    %>

    </body>
</html>

 

ASP:getcache.asp

<%
Const CACHE_DEFAULT_INTERVAL = 30 ‘每隔30秒刷新一次cache
Dim HTMLStream
Dim IsExpires
IsExpires = CacheExpires
Function CacheExpires
   
Dim strLastUpdate
    Dim result strLastUpdate = Application(“LastUpdate”)
   
If (strLastUpdate = “”) Or (CACHE_DEFAULT_INTERVAL < DateDiff(“s”, strLastUpdate, Now)) Then
        result =
true
        SetLastUpdateTime
    Else
        result =
false
    End If
    CacheExpires = result
End Function

Sub SetLastUpdateTime
    Application.Lock
    Application(
“LastUpdate”) = CStr(now())
    Application.UnLock
End Sub

Sub GetHTMLStream
    If IsExpires Then
        UpdateHTMLStream
    End If
    HTMLStream=Application(
“CACHE_HTMLStream”)
End Sub

Sub UpdateHTMLStream
   
dim d
    d = FetchHTMLStream
    Application.Lock
    Application(
“CACHE_HTMLStream”) = d
    Application.UnLock
End Sub

Function
FetchHTMLStream 
  
  Dim rs ,strSQL, strHTML
    Set rs = CreateObject(“ADODB.Recordset”)
    strSQL = “select categoryID , categoryname from categories”
    rs.Open strSQL, strConn,adOpenForwardOnly,adLockReadOnly
    strHTML = strHTML & “<select name=”"slt_search”">”
    while (not rs.EOF)
        strHTML = strHTML & “<option>”
        strHTML = strHTML & rs.Fields
(“categoryname”)
        strHTML = strHTML &
“</option>” rs.MoveNext
    wend
    strHTML = strHTML & “</select>”
    rs.Close

    Set rs = Nothing
    FetchHTMLStream = strHTML
End Function
%>

ASP:conn.asp

<!–METADATA NAME=”Microsoft ActiveX Data Objects 2.5 Library” TYPE=”TypeLib” UUID=”{00000205-0000-0010-8000-00AA006D2EA4}”–>
<%
    dim strConn
    strConn =
“Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=Northwind”
%>

ASP小技巧锦集

Filed under: ASP — FDS @ 20:38

严格控制Session

可以将不需要Session的内容(比如帮助画面,访问者区域,等等)移动到关闭Session的独立ASP应用程序中。在基础页面上,可以给ASP一个指示,让它不需要使用Session。将下面的代码直接加入到ASP页面的头部:
  
<%@EnableSessionState=False%>

在Web服务器上缓存经常使用的数据

典型的情况是:ASP页面从后台存储中取回数据,然后以超文本标记语言(HTML)的形式形成结果。不管数据库的速度如何,从内存中取回数据要比从后台存储设备中快得多。从本地硬盘读取数据通常也非常快。所以,提高性能可以通过缓存服务器上的数据来实现,无论是将数据缓存在内存中,或者本地硬盘中。 

缓存是经典的“空间换时间”的折中方式。如果缓存得恰当,就可以看到显著的性能提升。为了让缓存有效,必须保证缓存数据是经常要重用的,而且也是计算起来繁琐的。装满陈旧数据的缓存是对内存的浪费。

不经常改变的数据是缓存的较好对象,因为不需要随时考虑这些数据更新后的同步操作。组合框、参考表格、DHTML代码、扩展标记语言串、菜单以及站点配置变量(包括数据源名字,Internet协议地址IP以及Web路径)都是很好的缓存对象。注意:要缓存数据表达式而不是数据本身。如果一个ASP页面经常变化并且很费力去缓存(比如整个产品目录),就要考虑预产生HTML,而不是每次发生请求时再描述它。

在Application或Session对象中缓存经常使用的数据

ASP中的Application和Session对象是在内存中缓存数据的便利容器。你可以将数据赋值给Application和Session对象,这些数据在HTTP调用期间将一直保持在内存中。Session中的数据是为每一个用户服务的,Application中的数据是所有用户共享的。

何时需要在Application和Session中装入数据?通常,当应用程序启动或者会话开始时,数据就被装入了。为了在这时装入数据,在Application OnStart()或者Session OnStart()中分别添加适当的代码。这些函数位于文件Global.asa中,如果原来不存在,就添加上。也可以在数据首次需要的时候调入,在ASP页面中添加代码,检查数据是否存在,如果没有发现,就调入它。这里有一个例子,它代表了被称为“lazy evalution”的经典性能处理技术:直到需要,再去计算。 

拷贝经常使用的数据到脚本变量中

在ASP中存取COM对象时,应该拷贝经常使用的对象数据到脚本变量中,这样就减少了对COM对象的方法调用。这些调用要比存取脚本变量相对来说费时费力。当存取Collection和Dictionary对象时,使用这项技巧也减少了昂贵的查找操作。

通常,如果要不止一次地存取对象数据,就应将数据放入脚本变量中,对象数据主要也就是Request变量(表单和查询字符串变量)。比如,站点要传递一个叫做UserID的查询字符串变量,假设它将在一个特殊页面被引用12次,那么不需要调用Request(“UserID”)12次,只要在ASP页面的头部分配给UserID一个变量,然后在页面中使用它,这样做就节省了11次COM方法的调用。

在任何可能时使用Server.Transfer,而不要用Response.Redirect

Response.Redirect告诉浏览器请求另一个不同的页面,这常常用于引导用户到登录页面或者出错处理页面。由于重定向强迫了一个新页面请求,结果是浏览器必须要与Web服务器循环2次,并且Web服务器必须处理一个额外的请求。Server.Transfer执行在同一服务器上的页面传输,这将避免额外的浏览器-Web服务器的数据循环,形成良好的系统性能,对于用户也有较好的响应时间。当然Server.Transfer只支持相对路径(即站内使用)。

2008年12月29日

asp的日期和时间函数介绍

Filed under: ASP — 标签: — FDS @ 09:25

通过asp的函数得到日期和时间,可以使用日期和时间函数来得到各种格式的日期和时间。

函数 语法 说明 示例
Now Now() 取得系统当前的日期和时间 Dim MyVar MyVar = Now
‘MyVar 包含当前的日期和时间。
Date Date() 取得系统当前的日期 Dim MyDate MyDate = Date
‘MyDate 包含当前系统日期。
Time Time() 取得系统当前的时间 Dim MyTime MyTime = Time
‘返回当前系统时间。
Year Year(Date) 取得给定日期的年份 Dim MyDate, MyYear
MyDate = #October 19, 1962#
‘分派一日期。

MyYear = Year(MyDate)
‘MyYear 包含 1962。

Month Month(Date) 取得给定日期的月份 Dim MyVar MyVar = Month(Now)
‘MyVar包含当前月对应的数字。
Day Day(Date) 取得给定日期是几号 Dim MyDay MyDay = Day(“October 19, 1962″)
‘MyDay包含 19。
Hour Hour(time) 取得给定时间是第几小时 Dim MyTime, MyHour
MyTime = Now MyHour = Hour(MyTime)
‘MyHour 包含代表当前时间的数值。
Minute Minute(time) 取得给定时间是第几分钟 Dim MyVar
MyVar = Minute(Now)
Second Second(time) 取得给守时间是第几秒 Dim MySec
MySec = Second(Now)
‘MySec 包含代表当前秒的数字。
WeekDay WeekDay(Date) 取得给定日期是星期几的整数,1表示星期日,2表示星期一,依此类推 Dim MyDate, MyWeekDay
MyDate = #October 19, 1962#
‘分派日期

MyWeekDay = Weekday(MyDate)
‘MyWeekDay包含 6,MyDate 代表星期五

DateDiff DateDiff(“Var”,Var1,Var2)
Var:日期或时间间隔因子,有如下参数:
yyyy 年 m月 d 日 ww星期 h小时 s秒Var1:第一个日期或时间
Var2:第二个日期或时间,比Var1晚
计算两个日期或时间的间隔 DateDiff(“d”,Date(),#1/1/2005#)
‘返回离2005元旦还有多少

DateDiff(“h”,Date(),#1/1/2005#)
‘返回离2005元旦还有多少小时
DateDiff(“d”,#1/1/2003#,#1/1/2005#)
‘返回两个日期之间的天数

DateAdd DateDiff(“Var”,Var1,Var2)
Var:日期或时间间隔因子:
Var1:日期或时间间隔倍数
Var2:日期或时间的基准
对两个日期或时间作加法 如下示例将 95 年 1 月 31 日加上一个月:NewDate = DateAdd(“m”, 1, “31-Jan-95″)在这个示例中,DateAdd 返回 95 年 2 月 28 日,而不是 95 年 2 月 31 日。如果 date 为 96 年 1 月 31 日,则返回 96 年 2 月 29 日,这是因为 1996 是闰年。如果计算的日期是在公元 100 年之前,则会产生错误。
FormatDateTime FormatDateTime(Date,vbShortDate) 转化为短日期格式 FromatDateTime(Date(),vbLongDate)
“以长日期格式显示
  FormatDateTime(Date,vbLongDate) 转化为长日期格式
  FormatDateTime(Date,vbShortTime) 转化为短时间格式
  FormatDateTime(Date,vbLongTime) 转化为长时间格式

ASP生成静态html页面简单实例

Filed under: ASP — 标签: — FDS @ 09:21

为了SEO,静态化页面是一个重要的步骤,这里介绍一个ASP生成静态html页面简单实例,比较易懂,看以下代码,可以亲自试试看,让后自己在改变下。

createhtml.asp
<%
filename=”test.html”
if request(“body”)<>”" then
set fso = Server.CreateObject(“Scripting.FileSystemObject”)
set fout = fso.CreateTextFile(server.mappath(“”&filename&”"))
fout.write “标题(title):” & request.form(“title”) & “<br>”
fout.write “内容(body):” & request.form(“body”)
fout.close
set fout=nothing
set fso=nothing
end if
%>
<form name=”form1″ method=”post” action=”">
<input name=”title” size=18><br>
  <textarea name=”body”></textarea>
  <br>
  <br>
  <input type=”submit” name=”Submit” value=”生成”>
</form>


然后在浏览器输入打开createhtml.asp这个页面,填写完毕后,就会生成test.html这个文件,里面的内容就是你刚才填写的。

Powered by WordPress