解析ASP與存儲過程(5)_ASP教程

      編輯Tag賺U幣
      教程Tag:暫無Tag,歡迎添加,賺取U幣!

      推薦:解析ASP中的常用服務器檢測源碼
      在寫ASP網頁時常用的檢測代碼: 服務器現在時間: 引用 % =now %> 服務器CPU型號: 引用 %=Request.ServerVariables(HTTP_UA_CPU)%> 當前分辨率: 引用 &l

      在以上代碼中,可以看到,與聲明返回值不同,聲明輸入參數時需要5個參數,聲明輸出參數時需要4個參數。聲明輸入參數時5個參數分別為:參數名、參數數據類型、參數類型、數據長度、參數值。聲明輸入參數時,沒有最后一個參數:參數值。

      需要特別注意的是:在聲明參數時,順序一定要與存儲過程中定義的順序相同,而且各參數的數據類型、長度也要與存儲過程中定義的相同。

      如果存儲過程有多個參數,ASP代碼會顯得繁瑣,可以使用with命令簡化代碼:

      以下為引用的內容:

      '**調用帶有輸入輸出參數的存儲過程(簡化代碼)**
      DIM MyComm,UserID,UserName
      UserID = 1
      Set MyComm = Server.CreateObject("ADODB.Command")
      with MyComm

      .ActiveConnection = MyConStr 'MyConStr是數據庫連接字串
      .CommandText = "getUserName" '指定存儲過程名
      .CommandType = 4 '表明這是一個存儲過程
      .Prepared = true '要求將SQL命令先行編譯
      .Parameters.append .CreateParameter("@UserID",3,1,4,UserID)
      .Parameters.append .CreateParameter("@UserName",200,2,40)
      .Execute
      end with
      UserName = MyComm(1)
      Set MyComm = Nothing

      假如我們要取得ID為1到10,10位用戶的用戶名,是不是要創建10次Command對象呢?不是的,如果需要多次調用同一存儲過程,只需改變輸入參數,就會得到不同的輸入參數:

      以下為引用的內容:

      '**多次調用同一存儲過程**
      DIM MyComm,UserID,UserName
      UserName = ""
      Set MyComm = Server.CreateObject("ADODB.Command")
      for UserID = 1 to 10
      with MyComm
      .ActiveConnection = MyConStr 'MyConStr是數據庫連接字串
      .CommandText = "getUserName" '指定存儲過程名
      .CommandType = 4 '表明這是一個存儲過程
      .Prepared = true '要求將SQL命令先行編譯
      if UserID = 1 then
      .Parameters.append .CreateParameter("@UserID",3,1,4,UserID)
      .Parameters.append .CreateParameter("@UserName",200,2,40)
      .Execute
      else
      '重新給入參賦值(此時參數值不發生變化的入參以及出參不必重新聲明)
      .Parameters("@UserID") = UserID
      .Execute
      end if
      end with
      UserName = UserName MyComm(1) "," '也許你喜歡用數組存儲
      next
      Set MyComm = Nothing

      通過以上代碼可以看出:重復調用同一存儲過程時,只需為值發生改變的輸入參數重新賦值即可,這一方法在有多個輸入輸出參數,且每次調用時只有一個輸入參數的值發生變化時,可以大大減少代碼量。

      5. 同時具有返回值、輸入參數、輸出參數的存儲過程

      前面說過,在調用存儲過程時,聲明參數的順序要與存儲過程中定義的順序相同。還有一點要特別注意:如果存儲過程同時具有返回值以及輸入、輸出參數,返回值要最先聲明。

      為了演示這種情況下的調用方法,我們改善一下上面的例子。還是取得ID為1的用戶的用戶名,但是有可能該用戶不存在(該用戶已刪除,而userid是自增長的字段)。存儲過程根據用戶存在與否,返回不同的值。此時,存儲過程和ASP代碼如下:

      以下為引用的內容:

      /*SP5*/
      CREATE PROCEDURE dbo.getUserName
      --為了加深對"順序"的印象,將以下兩參數的定義順序顛倒一下
      @UserName varchar(40) output,
      @UserID int
      as
      set nocount on
      begin
      if @UserID is null return
      select @UserName=username
      from dbo.[userinfo]
      where userid=@UserID
      if @@rowcount>0
      return 1
      else
      return 0
      return
      end
      go

      分享:解析ASP中腳本執行順序
      如果機房馬上要關門了,或者你急著要和MM約會,請直接跳到第四個自然段。 以下敘述的腳本包括服務器端腳本和客戶端的腳本,服務器端腳本指在服務器上運行的那部分腳本,比如常見的Respon

      來源:模板無憂//所屬分類:ASP教程/更新時間:2009-08-22
      相關ASP教程