Archive for the ‘ASP’ category

IsNumberic() isdate() cdate()函数使用实例

January 22nd, 2008

ASP判断是否为数字
if IsNumeric(request.QueryString(“id”))=false then
Response.Write(““)
Response.End()
end if
读取一段日期内的数据
select * from table where date字段 between #99-01-01# and #99-12-31#
isdate()函数
job_showtime=request.Form(“Year”)&”-”&request.Form(“Month”)&”-”&request.Form(“Day”)
if (isdate(job_showtime)=false) then
Response.Write(““)
Response.End()
end if
cdate()函数
if (cdate(job_showtime) Response.Write("")
Response.End()
end if
ASP中日期型数值的计算方法
我们在ASP程序中常要用到计算日期数值的时候,如在论坛中我们要用日期来判断此条信息是否为最
新的信息来以便显示NEW来提醒用户。有时我们要单独对年或月日数值进行相加或是减,往往无从下手,
下面就日期型数值的计算给出几个函数和例子。
在日期型数据的计算中,首先我们要对数值进行日期型转化即用CDATE()函数。
对日期的加减我们可以使用DateAdd()函数来完成。
DateAdd(interval,number,date)函数语法中有下列命名参数:
interval :字符串表达式,是所要加上去的时间间隔。
number :数值表达式,是要加上的时间间隔的数目。其数值可以为正数(得到未来的日期),也可以为负
数(得到过去的日期)。
date:Variant (Date) 或表示日期的文字,这一日期还加上了时间间隔。
interval 参数具有以下设定值:
设置 描述
yyyy 年
q 季
m 月
y 一年的日数
d 日
w 一周的日数
ww 周
h 时
n 分钟
s 秒
下面的例子有助你理解日期型数值的转化计算方法:
<%
'在原来时间的基础上加上6个月
OldDate="2001-03-18"
OldDate=CDate("2001-03-18")'对日期数值进行格式化
NowDate=DateAdd("m",6,OldDate)
Response.write NowDate
%>
此例子的输出结果为:
2001-09-18
如将上面例子的M改为d则输出结果变为
2001-03-24
以此类推你可以相应对季q,年y.....(见上面的interval参数设定值)进行不同的操作。
另外我们要计算数据库中的日期和现在日期差天数或月数我们也可以用
datediff()函数来实现
其语法为:
DateDiff(interval, date1, date2)
interval的使用方法与上面的dateadd()函数一样。
例:
<%
response.write datediff("d",cdate("2001-01-18"),cDate("2001-08-19"))
%>
其反回值为:
2
即相差两天时间。

CDate()函数asp

January 22nd, 2008

【名称】
CDate
【类别】
转换函数
【原形】
CDate(expression)
【参数】
必选的,expression 参数可以是一个任何有效的日期表达式。
【返回值】
返回一个Date。
【异常/错误】

【描述】
  强制将一个表达式转换成Date特定数据类型。
【示例】
本示例使用 CDate 函数将字符串转换成 Date。一般说来,字符串格式的日期与时间硬编码(如示例中所示)并不好。较好的做法是使用日期原义表达式和时间的原义表达式(如 #2/12/1969#,#4:45:23 PM#)。
Dim MyDate, MyShortDate, MyTime, MyShortTime
MyDate = “February 12, 1969″ ' 定义日期。
MyShortDate = CDate(MyDate) ' 转换为 Date 数据类型。
MyTime = “4:35:47 PM” ' 定义时间。
MyShortTime = CDate(MyTime) ' 转换为 Date 数据类型。
【备注】
函数名称决定返回类型,如下所示。
函数
返回类型
expression 参数范围
CBool
Boolean
任何有效的字符串或数值表达式。
CByte
Byte
0 至 255。
CCur
Currency
-922,337,203,685,477.5808 至922,337,203,685,477.5807。
CDate
Date
任何有效的日期表达式。
CDbl
Double
负数从 -1.79769313486232E308 至 -4.94065645841247E-324;正数从 4.94065645841247E-324 至 1.79769313486232E308。
CDec
Decimal
零变比数值,即无小数位数值,为 +/-79,228,162,514,264,337,593,543,950,335。对于 28 位小数的数值,范围则为 +/-7.9228162514264337593543950335;最小的可能非零值是 0.0000000000000000000000000001。
CInt
Integer
-32,768 至 32,767,小数部分四舍五入。
CLng
Long
-2,147,483,648 至 2,147,483,647,小数部分四舍五入。
CSng
Single
负数为 -3.402823E38 至 -1.401298E-45;正数为 1.401298E-45 至 3.402823E38。
CStr
String
依据 expression 参数返回 Cstr。
CVar
Variant
若为数值,则范围与Double相同;若不为数值,则范围与String相同。
如果传递给函数的 expression 超过转换目标数据类型的范围,将发生错误。
通常,在编码时可以使用数据类型转换函数,来体现某些操作的结果应该表示为特定的数据类型,而不是缺省的数据类型。例如,当单精度、双精度或整数运算发生的情况下,使用 CCur 来强制执行货币运算。
应该使用数据类型转换函数来代替 Val,以使国际版的数据转换可以从一种数据类型转换为另一种。例如,当使用 Ccur 时,不同的小数点分隔符、千分位分隔符和各种货币选项,依据系统的国别设置都会被妥善识别。
当小数部分恰好为 0.5 时,Cint 和 CLng 函数会将它转换为最接近的偶数值。例如,0.5 转换为 0、1.5 转换为 2。Cint 和 CLng 函数不同于 Fix 和 Int 函数,Fix 和 Int 函数会将小数部分截断而不是四舍五入。并且 Fix 和 Int 函数总是返回与传入的数据类型相同的值。
使用 IsDate 函数,可判断 date 是否可以被转换为日期或时间。Cdate 可用来识别日期文字和时间文字,以及落入可接受的日期范围内的数值。当转换一个数字成为日期时,是将整数部分转换为日期,小数部分转换为从午夜起算的时间。
CDate 依据系统上的国别设置来决定日期的格式。如果提供的格式为不可识别的日期设置,则不能正确判断年、月、日的顺序。另外,长日期格式,若包含有星期的字符串,也不能被识别。
CVDate 函数也提供对早期 Visual Basic 版本的兼容性。CVDate 函数的语法与 CDate 函数是完全相同的,不过,CVDate 是返回一个 Variant,它的子类型是 Date,而不是实际的 Date 类型。因为现在已有真正的 Date 类型,所以 CVDate 也不再需要了。转换一个表达式成为 Date,再赋值给一个 Variant,也可以达到同样的效果。也可以使用这种技巧将其他真正的数据类型转换为对等的 Variant 子类型。
注意 CDec 函数不能返回独立的数据类型,而总是返回一个 Variant,它的值已经被转换为 Decimal 子类型。

instr()函数asp

January 21st, 2008

语法
InStr([start, ]string1, string2[, compare])
   InStr 函数的语法有以下参数:
参数 描述
start 可选。数值表达式,用于设置每次搜索的开始位置。如果省略,将从第一个字符的位置开始搜索。如果 start 包含 Null,则会出现错误。如果已指定 compare,则必须要有 start 参数。
String1 必选。接受搜索的字符串表达式。
String2
必选。要搜索的字符串表达式。
Compare 可选。指示在计算子字符串时使用的比较类型的数值。有关数值,请参阅”设置”部分。如果省略,将执行二进制比较。
compare 参数可以有以下值:
常数 值 描述
vbBinaryCompare 0 执行二进制比较。
vbTextCompare 1 执行文本比较。
   [返回值]
   InStr 函数返回以下值:
   如果 InStr 返回
   string1 为零长度 0
   string1 为 Null Null
   string2 为零长度 start
   string2 为 Null Null
   string2 没有找到 0
   在 string1 中找到 string2 找到匹配字符串的位置
   start > Len(string2) 0
   下面的示例利用 InStr 搜索字符串:
Dim SearchString, SearchChar, MyPos
SearchString =”XXpXXpXXPXXP” ' 要在其中搜索的字符串。
SearchChar = “P” ' 搜索 “P”。
MyPos = Instr(4, SearchString, SearchChar, 1) '文本比较从第四个字符开始返回 6。
MyPos = Instr(1, SearchString, SearchChar, 0) '二进制比较从第1个字符开始返回 9。
MyPos = Instr(SearchString, SearchChar) ' 返回 9。
' 缺省为二进制比较(最后一个参数省略)。
MyPos = Instr(1, SearchString, “W”) ' 二进制比较从第1个字符开始返回 0 (没有找到 “W”)。
   注意 InStrB 函数使用包含在字符串中的字节数据,所以 InStrB 返回的不是一个字符串在另一个字符串中第一次出现的字符位置,而是字节位置。
   总结概括:instr的功能就是: 返回字符或字符串在另一个字符串中第一次出现的位置,好了,让我们在看看哪个代码:
if instr(Request(“id”),” “)>0 or instr(Request(“id”),”'”)>0 then
   含义:比较 字符(空格)与字符(')在request(”id”)中的具体位置(进行二进制制比较),假如找到了(空格)与(‘)字符,那么就是then 后的语句!
   现在大家理解这个含义了吧!
   当我看第一眼的时候我就说,假如在asp?Id=90加上字符(;或,)等等一些字符时不是造样出错吗?(是,回答的肯定的:)
   估计又有人说,那我会在if instr(Request(“id”),” “)>0 or instr(Request(“id”),”'”)>0 then 语句中在加些字符,比如改为:if instr(Request(“id”),” “)>0 or instr(Request(“id”),”'”)>0 or instr(Request(“id”),”;”)>0 or instr(Request(“id”),”, “)>0 then

用正则表达式过滤html代码 asp

January 14th, 2008

代码例子如下:
< %
Option Explicit
Function stripHTML(strHTML)
'Strips the HTML tags from strHTML
Dim objRegExp, strOutput
Set objRegExp = New Regexp
objRegExp.IgnoreCase = True
objRegExp.Global = True
objRegExp.Pattern = "<.+?>”
'Replace all HTML tag matches with the empty string
strOutput = objRegExp.Replace(strHTML, “”)
'Replace all < and > with < and >
strOutput = Replace(strOutput, “< ", "<")
strOutput = Replace(strOutput, ">“, “>”)
stripHTML = strOutput 'Return the value of strOutput
Set objRegExp = Nothing
End Function
%>

Enter an HTML String:
» Read more: 用正则表达式过滤html代码 asp

file与virtual区别

January 5th, 2008

在编写asp程序的时候,通常都会用到把一段相对独立的文件代码嵌套到当前页面中来。在实际的使用中很多人对”file”和”virtual”的使用不太理解,导致页面执行的时候会出现错误。现就该问题作一个简述。
  使用”file”的时候,等号后面使用的是相对路径。所谓相对路径,是以当前文件所在的文件夹作为始点,通过路径搜索,得到其它文件(或文件夹)与当前文件的路径关系。使用”virtual”的时候,等号后面使用的是绝对路径。绝对路径,是以网站根目录作为始点,通过路径搜索,得到文件(或文件夹)的完整路径。
  这两个定义不太好理解,举例说明:iis设置的站点根目录为”c:\wwwroot\”,a.asp文件所在目录是c:\wwwroot\afolder,b.asp文件所在目录是c:\wwwroot\bfolder,c.asp文件所在目录是c:\wwwroot\afolder\cfolder,则以a.asp作为起点寻找b.asp,所经过的路径依次为c:\wwwroot\afolder、c:\wwwroot、c:\wwwroot\bfolder;而寻找c.asp,所经过的路径就是c:\wwwroot\afolder、c:\wwwroot\afolder\cfolder。由此得出,b.asp对于a.asp的相对路径就是../bfolder;相同的,a.asp对于b.asp的相对路径就是../afolder。当a.asp文件需要使用”file”调用b.asp文件的时候,其语句就应该写为。调用c.asp,其语句是。而无论什么时候,a.asp、b.asp、c.asp这三个文件的绝对路径分别是c:\wwwroot\afolder、c:\wwwroot\bfolder、c:\wwwroot\bfolder\cfolder。因此,在a.asp文件中使用”virtual”调用另外两个文件,分别为

[Microsoft][ODBC Microsoft Access Driver]常见错误 不能打开

December 22nd, 2007

前天,N久以前做的一个ACCESS数据库的程序出错了,程序都没有改动过,之前好好的,突然就不行了。
错误信息如下:
———————————-
Microsoft OLE DB Provider for ODBC Drivers 错误 '80004005'
[Microsoft][ODBC Microsoft Access Driver]常见错误 不能打开注册表关键字 'Temporary (volatile) Jet DSN for process 0×728 Thread 0×854 DBC 0x276fb44 Jet'。
———————————-
由于最近一台服务器被人攻击垮掉了正在重装,没时间理这个问题。后来在朋友(是该程序的用户哦)的多翻催促下,决定搞定它。
一开始,还真不摸不清是怎么回事。在GOOGLE上搜了很多,众说纷纭,过滤去一堆没有结果的垃圾信息,得到下面几个可能原因:
1。微软已经不更新ODBC,需要改用JET的方式连接ACCESS数据库文件;
2。系统目录的权限发生的变更。
也有老帖子说什么原因是:“ACCESS数据库文件是ACCESS97版本的”,这个无须考虑,我用的是ACCESS2000数据库。
对于第一个原因,原来的连接字串如下:
–ODBC连接方式————————
mdbpath=server.MapPath(“my.mdb.asp”)
CnnStr = “DBQ=” & mdbpath & “;DRIVER={Microsoft Access Driver (*.mdb)};uid=admin;pwd=”
————————————-
改用JET连接后连接字串为:
—JET连接方式———————
CnnStr = “Provider=Microsoft.Jet.OLEDB.4.0;User Id=admin;Data Source=”& mdbpath &” ';Password=luntanbbs”
————————————-
测试过后无效,虽然提示的错误信息有点不同:
———————————-
Microsoft JET Database Engine 错误 '80004005' 未指定的错误
———————————-
最后检查第二个原因:系统目录权限不足。经询问,原来由于出于安全的考虑一同事把该服务器的WINNT目录设置为 Administrators、system “完全控制”,users 只读。
但是,按道理,这样的权限设置,ODBC的驱动程序处于 winnt\system32\odbcjt32.dll 这个也是可读的,难道是因为缺少“执行”权限?
我把 winnt\system32\目录下所有以odbc开头的DLL文件全部授予“执行”权限,发现还是一样的错误信息。跟着我索性把整个 system32 目录设成 everyone 可执行,可是一测试依然不行。
难道是还有其他文件被ODBC或JET调用但又不在这个system32目录下且又没有得到充分授权而导致失败?
正在想的时候,蓦然瞥见 winnt\temp 目录。嘿,我把 temp 目录设置成 everyone 可“写入”看看。
一测试,嘿,成了。使用ODBC连接方式的程序,成功的读取更新ACCESS数据库中的记录。
有意思的是,使用JET连接方式的程序,却报另一个错误:
——————————————-
Microsoft JET Database Engine 错误 '80040e4d' 无法启动应用程序。
工作组信息文件丢失,或是已被其它用户以独占方式打开。
——————————————-

判断字符串是否包含指定字符 asp

December 22nd, 2007

instr 函数 语言参考
版本 3.0
描述
返回某字符串在另一字符串中第一次出现的位置。
语法
instr([start, ]string1, string2[, compare])
instr 函数的语法有以下参数:
参数 描述
start 可选。数值表达式,用于设置每次搜索的开始位置。如果省略,将从第一个字符的位置开始搜索。如果 start 包含 null,则会出现错误。如果已指定 compare,则必须要有 start 参数。
string1 必选。接受搜索的字符串表达式。
string2 必选。要搜索的字符串表达式。
compare 可选。指示在计算子字符串时使用的比较类型的数值。有关数值,请参阅“设置”部分。如果省略,将执行二进制比较。
设置
compare 参数可以有以下值:
常数 值 描述
vbbinarycompare 0 执行二进制比较。
vbtextcompare 1 执行文本比较。
vbdatabasecompare 2 执行基于包含在数据库中的信息的比较。
返回值
instr 函数返回以下值:
如果 instr 返回
string1 为零长度 0
string1 为 null null
string2 为零长度 start
string2 为 null null
string2 没有找到 0
在 string1 中找到 string2 找到匹配字符串的位置
start > len(string2) 0
说明
注意 instrb 函数使用包含在字符串中的字节数据,所以 instrb 返回的不是一个字符串在另一个字符串中第一次出现的字符位置,而是字节位置。
if instr(str1,” “)>0 then 说明str1中包含空格
asp是instr(“原字符串”,”要找的字符串”)如果返回值大于0含有那个字符串
比如:我们要判断upschool包含在(www.yoyogu.cn)里面
我们就可以用以下这条函数.
Instr(str1,str2):从字符串str1,寻找另一个字符串str2第一个出现的位置
应用实例:
s=Instr(“www.yoyogu.cn”,”upschool”)
if s>0 then
包含
else
不包含
end if

Session 对象的集合以及属性、方法、事件在ASP中的应用

November 26th, 2007

Session StaticObjects 集合
StaticObjects 集合包含 Session 对象范围中用 标记创建的所有对象。该集合可用于确定对象特定属性的值,或用于遍历集合并获取所有对象的全部属性。
语法
Session.StaticObjects( Key )
参数
Key
要检索的属性。
注释
使用循环控制结构可以遍历 StaticObjects 集合中的关键字。请看下面的示例。
<%
Dim objprop
For Each objprop in Session.StaticObjects
Response.write(objproperty & " : " & Session.StaticObjects(objprop) & "
“)
Next
%>
Session Contents 集合
Session.contents 集合包括所有未使用 标记而为该会话建立的项目。此集合可用于确定指定会话项的值或遍历集合并检索出会话中所有项的列表。
语法
Session.Contents( Key )
参数
Key
要获取的属性的名称。
注释
您可以使用一个循环控制结构通过 Contents 集合的关键字来循环。下面的示例演示这一过程。
<%
Dim sessitem
For Each sessitem in Session.Contents
Response.write(sessitem & " : " & Session.Contents(sessitem) & "
“)
Next
%>
CodePage
CodePage 属性决定将被用以显示动态内容的代码页。
语法
Session.CodePage(=Codepage)
参数
Codepage
这是一个无符号整数,这个整数代表正在运行 ASP 脚本引擎的系统的有效代码页。
注释
代码页是一个可以包括数字、标点符号、以及其他字母的字符集。对于不同的语言和地区可以使用不同的代码页。例如, ANSI 代码页 1252 用于美国英语和大多数欧洲语言;OEM 代码页 932 用于日文汉字。
代码页是将字符映射成单字节值或多字节值的字符表。许多代码页共享 ASCII 字符集中 0×00 – 0x7F 之间的字符。
Abandon
Abandon 方法删除所有存储在 Session 对象中的对象并释放这些对象的源。如果您未明确地调用 Abandon 方法,一旦会话超时,服务器将删除这些对象 。
语法
Session.Abandon
注释
Abandon 方法被调用时,将按序删除当前的 Session 对象,不过在当前页中所有脚本命令都处理完后,对象才会被真正删除。这就是说,在调用 Abandon 时,可以在当前页上访问存储在 Session 对象中的变量,但在随后的 Web 页上不行。
例如,在下列脚本中,第三行打印出 Mary 值。这是因为在服务器处理完脚本前没有删除 Session 对象。
<%
Session.Abandon
Session("MyName") = "Mary"
Reponse.Write(Session("MyName"))
%>
如果在随后 Web 页上访问 MyName 变量,您将发现它是空的。这是因为当包含上一个例子的页面结束处理时,MyName 同前面的 Session 对象一起被删除了。
放弃会话并打开后面的 Web 页时,服务器会创建新的 Session 对象。您可以在新的 Session 对象中存储变量和对象。
示例
当服务器处理完当前页时,下面示例将释放会话状态。
<% Session.Abandon %>
LCID
LCID 属性决定用于显示动态内容的位置标识。
语法
Session.LCID(=LCID)
参数
LCID
有效的现场标识。
注释
LCID 指定现场标识,现场标识是唯一标识某个系统定义的现场的国际标准缩写。
SessionID
SessionID 属性返回用户的会话标识。在创建会话时,服务器会为每一个会话生成一个单独的标识。会话标识以长整形数据类型返回。
语法
Session.SessionID
注释
不要用 SessionID 属性为数据库应用程序创建主关键字。这是因为,如果 Web 服务器重新启动,则部分 SessionID 的值可能同服务器终止前产生的值相同。可以使用自动增加的列数据类型来代替,如 Microsoft® SQL Server 中的 IDENTITY,或 Microsoft® Access 中的 COUNTER 。
Session_OnStart
Session_OnStart 事件在服务器创建新会话时发生。服务器在执行请求的页之前先处理该脚本。Session_OnStart 事件是设置会话期变量的最佳时机,因为在访问任何页之前都会先设置它们。所有内建对象 (Application、ObjectContext、Request、Response、Server 和 Session) 都可以在 Session_OnStart 事件脚本中使用和引用。
语法

参数
ScriptLanguage
指定用于编写事件脚本的脚本编写语言。可以是任何一种支持脚本的语言,例如 VBScript 或 JScript。如果有多个事件使用同一种脚本编写语言,就可以将它们组织在一组
上述示例只能在支持 cookie 的浏览器中运行。因为不支持 cookie 的浏览器不能返回 SessionID cookie,所以,每当用户请求 Web 页时,服务器都会创建一个新会话。这样,对于每个请求,服务器都将处理 Session_OnStart 脚本并将用户重定向到启动页中。如果您要使用下面的脚本,建议您在启动页上放一个通知,告诉用户该站点要求支持 cookie 的浏览器。
注释
请注意,在 Redirect 方法之后的任何 Session_OnStart 事件脚本都不会执行。因此,应该在您的事件脚本的最后再调用 Redirect 方法。其演示如下例所示。

在上面的例子中,Redirect 方法在执行会话初始化脚本期间隐藏所有显示给客户的文字。
Session_OnEnd
Session_OnEnd 事件在会话被放弃或超时发生。在服务器内建对象中,只有 Application、Server 和 Session 对象可用。
语法

参数
ScriptLanguage
指定用于编写事件脚本的脚本编写语言。可以是任一支持脚本编写的语言,例如 VBScript 或 JScript。如果有多个事件使用同一种脚本编写语言,则可以将其组织在一组