ASP開發技巧三則

來源:互聯網
上載者:User
技巧     一、 伺服器端檔案的動態包含注一
  在ASP開發過程中,我們經常會將通用的函數製作成一個獨立的ASP檔案,然後通過Include方法引入需要的頁面。由於在執行過程中,伺服器會首先運行採用Include方法包含的檔案,然後才是當前頁面的代碼,所以,在實際執行過程中我們不可能使用Include方法來實現伺服器端的動態包含。
  看下面一段代碼:
  <%
  i=1
  str = "file" & i & "/a.asp"
  %>
  <!--#include virtual ="<% str %>"-->
  我們的本意是希望根據I的不同取值,包含不同目錄下的同名檔案,可是在執行過程中,卻會返回“找不到包含檔案 '<% str %>'。”的錯誤。也就是說在ASP中,我們不可能使用Include方法實現檔案的動態包含。
  要在ASP中實現真正的動態檔案包含,目前可行的方法是使用Server.Execute命令。Server.Execute是ASP3.0新增的一個控製程序流的新方法,可以在運行過程中臨時轉移到一個檔案、執行其內容,然後再返回原先的程式。
  使用Server.Execute命令重新書寫的代碼如下:
  <%
  i=1
  str = "file" & i & "/a.asp"
  Server.Execute str
  %>
  注一:本文討論的檔案動態包含,主要指包含檔案為變數的情況,有別於被包含的檔案名稱事先確定的情況。
  
  二、 資料庫記錄的大量刪除
  在用ASP開發管理程式中,會不可避免地涉及刪除資料庫記錄的操作。一般我們會採用下面兩種方法刪除記錄:使用Recordset.Delete方法或者直接使用SQL語句“Delete from 資料表 Where 主鍵=值”。而本文將要介紹的這種方法則可以同時刪除一條或多條記錄。下面我們首先來看一個具體的例子,在這個例子中我們會用到一張資料表(Subject)和兩個ASP檔案(list.asp和code.asp),該資料表包含了兩個欄位:
  ID、資料表主鍵,用來唯一標示資料庫中的記錄;
  Title:標題,用來顯示記錄的內容。
  兩個ASP檔案的內容如下:
  list.asp
  <%@ Language=VBScript %>
  <%
  
   '建立資料庫連接
   Dim objConn
   Set objConn = Server.CreateObject("ADODB.Connection")
   objConn.Open"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\Samples\Tooltips.mdb"
  
   '建立記錄集
   Dim objRS
   Set objRS = Server.CreateObject("ADODB.Recordset")
   objRS.Open "Subject", objConn
  
   '顯示記錄列表
   Response.Write "<FORM METHOD=POST ACTION=""Code.asp"">"
   Response.Write "<TABLE BORDER=1 CELLSPACING=1>"
  
   Response.Write "<TR>"
   Response.Write "<TH>刪除</TH>"
   Response.Write "<TH>標題</TH>"
   Response.Write "</TR>"
  
   Do While Not objRS.EOF
   Response.Write "<TR>"
   Response.Write "<TD><INPUT TYPE=CHECKBOX NAME=Delete "
   Response.Write "VALUE=" & CInt(objRS("ID")) & "></TD>"
   Response.Write "<TD>" & objRS("Title") & "</TD>"
   Response.Write "</TD></TR>"
   objRS.MoveNext
   Loop
  
   Response.Write "</TABLE>"
   Response.Write "<P><INPUT TYPE=SUBMIT VALUE=""刪除"">"
   Response.Write "</FORM>"
  
   ‘關閉ADO對象
   objRS.Close
   Set objRS = Nothing
  
   objConn.Close
   Set objConn = Nothing
  %>
  code.asp
  <%@ Language=VBScript %>
  <%
  
   '擷取刪除的記錄列表
   Dim strDeleteList
   strDeleteList = Request.Form ("Delete")
  
  
   '建立一個連線物件
   Dim objConn
   Set objConn = Server.CreateObject("ADODB.Connection")
   objConn.Open"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\Samples\Tooltips.mdb"
  
   '產生刪除記錄的SQL語句
   Dim strSQL
   strSQL = "DELETE FROM Subject WHERE ID IN (" & strDeleteList & ")"
  
   ‘執行刪除操作
   objConn.Execute strSQL
  
   '關閉連線物件
   objConn.Close
   Set objConn = Nothing
  %>
  從上面的代碼可以看到,我們首先在list.asp頁面中產生一個記錄列表,每條記錄前面都包含了一個Checkbox,這些CheckBox都使用了同一個名稱,每個CheckBox的取值對應資料表中的唯一記錄,由於在ASP中,如果一個表單上包含多個相同命名的控制項,會返回一個以“,”分隔的字串,所以,在Code.asp檔案中,我們首先取得所有Checkbox對應的取值,然後利用一個SQL語句“Delete from subject where id in (str)”完成記錄的刪除。其中的關鍵就在於“DELETE FROM TableNameWHERE TableID IN (String)”這個SQL語句。由於該SQL語句對於string沒有特殊的要求,所以我們既可以刪除一條記錄,也可以同時刪除多條記錄。
  這裡還需要說明一點,如果資料表中作為的欄位類型為字元型,則需要按下面的形式進行修改
  ……
  strDeleteList = Replace(strDeleteList,”,”,”’,’”)
  strSQL = "DELETE FROM Subject WHERE ID IN (‘" & strDeleteList & "’)"
  ……
  
  三、 用MetaDATA標記包含外部常量
  如果我們要在ASP程式中使用ADO事先定義的常量,那麼必須在每個用到ADO常量的頁面上包含“adovbs.inc”,否則就只能直接用數字表示。顯然,直接數字並不利於今後程式的修改,而且可以正常化開發需要極力避免的事情,但是每個頁面都包含“adovbs.inc”,又煩瑣了一點。所以,下面介紹另外一種一次包含的方法。這就是Global.asa中的TypeLibrary Declarations。
  由於一般的COM對象都會將常量定義包含在類型庫中,所以利用TypeLibrary Declarations可以直接讀取這些類型庫中定義好的常量。加上TypeLibrary Declarations只要在Global.asa中一次定義就可以在所有的ASP頁面中使用,效率明顯高於單個頁麵包含。
  TypeLibrary Declarations的文法形式為:
  <!--METADATA
  TYPE="TypeLib"
  FILE="file"
  UUID="typelibraryuuid"
  -->
  其中,File和UUID兩個屬性只要任選一個即可。File屬性指指向包含常量定義的完整檔案路徑,而UUID則指外部庫的GUID。
  例如我們包含在ASP程式中使用ADO常量,則可以採用下面兩種方式:
  <!—MetaDATA
   Type =”TypeLib”
   File = “C:\Program Files\Common Files\SYSTEM\ADO\msado21.tlb”
  -->
  或者
  <!—MetaDATA
   Type =”TypeLib”
   UUID = “00000201-0000-0010-8000-00AA006D2EA4”
  -->
  相信大家看了上面兩種方法,會很自然的選擇第一種。的確,利用物理目錄的方式明顯比後一種方法方便,但是如果開發的ASP程式需要到其它機器上安裝,那麼採用第二種方法會更好一點。為了方便大家,下面列出了ASP中一些常用的GUID
  名稱
  GUID
  ADO2.1
  {00000201-0000-0010-8000-00AA006D2EA4}
  ADO2.5
  {00000205-0000-0010-8000-00AA006D2EA4}
  ADO2.6
  {00000206-0000-0010-8000-00AA006D2EA4}
  ADO2.7
  {00000300-0000-0010-8000-00AA006D2EA4}
  FileSystemObject
  {420B2830-E718-11CF-893D-00A0C9054228}

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.