显示列表

<%
Function AAA(str)
   For i = 0 To 3
       If i = 1 Then Exit For
   Next
   AAA = str
End Function


For i = 0 To 5
   r = AAA("A")
   Response.Write(r)
Next
%>

这里 AAA 函数中有一个 i 变量会被认为和下面的 i 是同一个变量,这样就进入死循环了。
所以要注间函数中的变量一定要定义为局部变量。

<%
Function AAA(str)
   Dim i
   For i = 0 To 3
       If i = 1 Then Exit For
   Next
   AAA = str
End Function
%>

查看全文 | 分类(ASP) | 访问(0) | 编辑
 时间格式转换2009-06-13

'YYYY-MM-DD、YY-M-D、YYYY/MM/DD、YY/M/D
Function DateTimeFormat(dateTime, format)
   Select Case format
       Case "YYYY-MM-DD"
           DateTimeFormat = Year(dateTime) & "-" & Right("0" & Month(dateTime), 2) & "-" & Right("0" & Day(dateTime), 2)
       Case "YY-M-D"
           DateTimeFormat = Right(Year(dateTime), 2) & "-" & Month(dateTime) & "-" & Day(dateTime)
       Case "YYYY/MM/DD"
           DateTimeFormat = Year(dateTime) & "/" & Right("0" & Month(dateTime), 2) & "/" & Right("0" & Day(dateTime), 2)
       Case "YY/M/D"
           DateTimeFormat = Right(Year(dateTime), 2) & "/" & Month(dateTime) & "/" & Day(dateTime)
       Case Else
           DateTimeFormat = dateTime
   End Select
End Function


有一个系统自带的函数 FormatDateTime(Now, 1),第二个参数可以指定样式,但种类不多,写一个自定义的DateTimeFormat 比较好用些。

查看全文 | 分类(ASP) | 访问(5) | 编辑
 ASP中常用代码2009-06-11

'返回第一行,第一列的值
Function ExecuteScalar(sql)
   Dim rs1
   rs1 = Server.CreateObject("Adodb.Recordset")
   rs1.Open sql,conn,1,1
   If rs1.Bof And rs1.Eof Then
       ExecuteScalar = ""
   Else
       ExecuteScalar = rs1(0)
   End If
   rs1.Close
   Set rs1 = Nothing
End Function 


'返回数组,将第一行的数据放入数组中,UBound 函数获取数组长度
Function ExecuteOneArray(sql)
   Dim arr()
   Set rs = Server.CreateObject("Adodb.Recordset")
   rs.Open sql,conn,1,1
   If rs.Bof And rs.Eof Then
       ReDim Preserve arr(0)
       arr(0) = ""
   Else
       For i=0 To rs.Fields.Count - 1
           ReDim Preserve arr(i) '将数组长度变长
           arr(i) = rs(i)
       Next
   End If
   ExecuteOneArray = arr
   rs.Close
   Set rs = Nothing
End Function


'接收参数,返回整型
Function RequestInt(name)
   On Error Resume Next
   iD = Cint(Request(name))
   If Err.Number = 0 Then
       RequestInt = iD
   Else
       RequestInt = 0
   End If
End Function


'返回指定长度的字符串,长度按字节算
Function GetTopic(str, strlen)
   Dim l,t,c,i
   l = len(str)
   t = 0
   For i = 1 To l
       c = Abs(Asc(Mid(str, i, 1)))
       If c > 255 Then ' 汉字占两个位置
           t = t + 2
       Else
           t = t + 1
       End If
       If t >= strlen Then
           GetTopic = left(str, i)
           Exit For
       Else
           GetTopic = str
       End If
   Next
End Function

标签:常用代码 
查看全文 | 分类(ASP) | 访问(9) | 编辑

比如要发送一个Http请求,获取指定页面的内容

Response.Write(GetHttpPage("http://www.baidu.com/","GB2312"))

Function GetHttpPage(url, charset)
    Dim http
    Set http = Server.createobject("Msxml2.ServerXMLHTTP")
    http.Open "GET", url, false
    http.Send()
    If http.readystate<>4 Then
        Exit Function
    End If
    GetHttpPage = BytesToStr(http.ResponseBody, charset)
    Set http = Nothing
End function


Function BytesToStr(body, charset)
    Dim objStream
    Set objStream = Server.CreateObject("Adodb.Stream")
    objStream.Type = 1
    objStream.Mode = 3
    objStream.Open
    objStream.Write body
    objStream.Position = 0
    objStream.Type = 2
    objStream.Charset = charset
    BytesToStr = objStream.ReadText
    objStream.Close
    Set objStream = Nothing
End Function

查看全文 | 分类(ASP) | 访问(39) | 编辑

在ASP,没有 try catch,而是用 On Error Resume Next 代替

如比创建一个对象
try
{
   Set obj = Server.CreateObject("JMail.SmtpMail")
}
catch
{
   Response.Write("Err")
}

上面的代码是 ASP 中的写法是

On Error Resume Next
Set obj = Server.CreateObject("JMail.SmtpMail")
If Err.Number = 0 Then
   Response.Write("Yes")
Else
   Response.Write("Err")
End If

查看全文 | 分类(ASP) | 访问(10) | 编辑

rs.open Source, ActiveConnection, CursorType, LockType, Options
一共有五个参数
Source: SQL语句或存储过程等
ActiveConnection: 数据库连接对象
CursorType: 记录集的游标类型
LockType: 记录集的锁定类型
Options: 指示如何计算 Source 参数


CursorType 如下四个值:
AdOpenForwardOnly  (0) (默认值)打开仅向前类型游标。 rs.MovePrevious 不起作用。
AdOpenKeyset       (1)  打开键集类型游标。可自由移动。
AdOpenDynamic      (2)  打开动态类型游标。可自由移动。
AdOpenStatic       (3)  打开静态类型游标。可自由移动。

AdOpenKeyset 键集类型游标
如果同时有其他用户修改或删除了记录集中的一条记录, 记录集将反映这个变化,但是, 如果其他用户添加了一条新记录, 新记录不会出现在记录集中。

AdOpenDynamic 动态类型游标
其他用户造成的记录的任何变化都将在记录集中有所反映。 

AdOpenStatic 静态类型游标
只是数据的一个快照,用户对记录所做的修改,增加或删除都不会反映到记录集中。

LockType 如下四个值:
AdLockReadOnly        (1)(默认值)只读。不能改变数据。
AdLockPessimistic     (3) 悲观锁定。 编辑一开始,则立即锁住记录。
AdLockOptimistic      (3) 乐观锁定。 用 Update 方法提交更新记录时才锁定记录。
AdLockBatchOptimistic (4) 批量乐观锁定。允许修改多个记录,只有调用 UpdateBatch 方法后才锁定记录。

Options 如下:
adCmdText: 将 Source 作为命令的文本定义来计算。
adCmdStoredProc: 将 Source 视为存储过程。 
这个参数不常用。


常用的有
rs.Open sql, conn, 1, 1
键集类型游标,只读
记录集可自由移动,但不能修改。


rs.Open sql, conn, 1, 3
键集类型游标,乐观锁定
记录集可自由移动,可以修改,只在 Update 只锁定当前记录。


记录集对象的方法:
rs.MoveNext 将记录指针从当前的位置向下移一行 
rs.MovePrevious 将记录指针从当前的位置向上移一行 
rs.MoveFirst 将记录指针移到数据表第一行 
rs.MoveLast 将记录指针移到数据表最后一行 
rs.AbsolutePosition = N 将记录指针移到数据表第N行 
rs.AbsolutePage = N 将记录指针移到第N页的第一行 
rs.PageSize = N 设置每页为N条记录 
rs.PageCount 根据 pagesize 的设置返回总页数 
rs.RecordCount 返回记录总数 
rs.Bof 返回记录指针是否超出数据表首端,true表示是,false为否 
rs.Eof 返回记录指针是否超出数据表末端,true表示是,false为否 
rs.Delete 删除当前记录,但记录指针不会向下移动 
rs.AddNew 添加记录到数据表末端 
rs.Update 更新数据表记录

查看全文 | 分类(ASP) | 访问(7) | 编辑

'连接ACCESS数据库
connStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\ABC.mdb"

'连接MSSQL数据库
connStr = "Driver={SQL Server};Server=127.0.0.1;uid=sa;pwd=;database=ABC"


<%
On Error Resume Next
Dim connStr
connStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("ABC.mdb")

Set conn = Server.CreateObject("Adodb.Connection")
conn.Open connStr
conn.Close
Set conn = Nothing

If Err Then
   err.Clear
   Set conn = Nothing
   Response.Write("数据库连接出错。")
   Response.End
End If
%>

查看全文 | 分类(ASP) | 访问(5) | 编辑