Linux中国 Linux中国门户站!
设为主页 设为主页
收藏本站 收藏本站
 
当前位置 :首页 ->编程语言 ->ASP ->正文

ASP实用技巧28则

来源:Linuxdby.com 作者:Webmaster 时间:2007-04-24 点击: [收藏] [投稿]


<%
Function GetEmploymentStatusList
   Dim d
   d = Application("EmploymentStatusList")
   If d = "" Then
      ' FetchEmploymentStatusList 函数(不显示)
      ' 从 DB 中取出数据,返回数组
      d = FetchEmploymentStatusList()
      Application("EmploymentStatusList") = d
   End If
   GetEmploymentStatusList = d
End Function
%>

可以为每一块所需的数据编写类似的函数。

数据应该以什么格式存储?任何变量类型均可存储,因为所有脚本变量是各不相同的。例如,可以存储字符串、整型或数组。通常,您将以这些变量类型之一存储 ADO 记录集的内容。若要获取 ADO 记录集衍生的数据,可以手工将数据复制到 VBScript 变量中,每次一个字段。使用一个 ADO 记录集保留函数 GetRows()、GetString() 或 Save() (ADO 2.5),会更快更简便。完整而详细的内容已超出了本文的范围。下面的演示函数使用了 GetRows() 来返回记录集数据的数组:


' 取记录集,以数组返回
Function FetchEmploymentStatusList
   Dim rs 
   Set rs = CreateObject("ADODB.Recordset")
   rs.Open "select StatusName, StatusID from EmployeeStatus", _
           "dsn=employees;uid=sa;pwd=;"
   FetchEmploymentStatusList = rs.GetRows() ' 以数组返回数据
   rs.Close
   Set rs = Nothing
End Function

对上面示例的进一步改进应当是缓存该列表的 HTML,而不是缓存数组。下面是一个简单的范例:

' 取记录集,以“HTML 选项”列表返回
Function FetchEmploymentStatusList
   Dim rs, fldName, s
   Set rs = CreateObject("ADODB.Recordset")
   rs.Open "select StatusName, StatusID from EmployeeStatus", _


           "dsn=employees;uid=sa;pwd=;"
   s = "<select name=""EmploymentStatus">" & vbCrLf
   Set fldName = rs.Fields("StatusName") ' ADO 字段绑定
   Do Until rs.EOF
     ' 下面一行违背了不要进行字符串连接,
     ' 但这是可以的,因为我们正在建立高速缓存
     s = s & " <option>" & fldName & "</option>" & vbCrLf
     rs.MoveNext
   Loop
   s = s & "</select>" & vbCrLf
   rs.Close
   Set rs = Nothing ' 参见尽早释放
   FetchEmploymentStatusList = s ' 以字符串返回数据
End Function

在正常的情况下,可以在 Application 或 Session 作用域中缓存 ADO 记录集本身。有两个警告: 

ADO 必须为标记的自由线程 
必须使用断开连接的记录集。 
如果不能保证满足这两个要求,请不要缓存 ADO 记录集。在下面的非灵活组件和不要缓存连接技巧中,我们将讨论在 Application 或 Session 作用域中存储 COM 对象的危险。

如果在 Application 或 Session 作用域中存储数据,这些数据将一直保留在那儿,直到在程序中改变它、Session 过期或 Web 应用程序重新启动时为止。数据需要更新如何处理?若要用手工强制更新应用程序数据,可以调用只允许管理员访问的数据更新 ASP 页。另外,还可以通过函数,周期地自动刷新数据。下面的示例存储带缓存数据的时间戳,在指定时间间隔后刷新数据。

<%
' 未显示错误处理...
Const UPDATE_INTERVAL = 300 ' 刷新时间间隔,以秒计

' 函数返回雇佣状态列表
Function GetEmploymentStatusList
   UpdateEmploymentStatus

   GetEmploymentStatusList = Application("EmploymentStatusList")
End Function

' 定期更新缓存的数据
Sub UpdateEmploymentStatusList
   Dim d, strLastUpdate
   strLastUpdate = Application("LastUpdate")
   If (strLastUpdate = "") Or _
         (UPDATE_INTERVAL  DateDiff("s", strLastUpdate, Now)) Then

      ' 注意:此处可能有两个或多个调用。这是可以的,只不过

 如果您对本文有任何疑问或者建议,请到讨论区发表您的意见: >> 论坛入口 <<



上一篇:在ASP程序中执行SQL语句的安全性问题   下一篇:ASP中用Join和Array,可以加快字符连接速度。

文章评论】 【收藏本文】 【推荐好友】 【打印本文】 【我要投稿】 【论坛讨论
更多相关文章
Power by linux-cn.com 粤ICP备05006655号