首頁 >資料庫 >mysql教程 >如何在經典 ASP 中有效執行預存程序並檢索結果?

如何在經典 ASP 中有效執行預存程序並檢索結果?

Susan Sarandon
Susan Sarandon原創
2025-01-10 10:22:41372瀏覽

How to Efficiently Execute Stored Procedures and Retrieve Results in Classical ASP?

經典 ASP 儲存程序執行與結果擷取:最佳實務

經典 ASP 開發人員在使用 SQL Server 預存程序時經常會遇到挑戰,特別是在結果檢索方面。 即使過程應該傳回數據,空響應或關閉記錄集也是常見問題。 這通常源自於忽略關鍵的 SQL Server 設定和 ASP 程式碼中低效的資料處理。

導致空結果的一個常見原因是忽略在預存程序中使用SET NOCOUNT ON。 預設情況下,SQL Server 會傳回受影響的行數,這可能會幹擾實際結果集。 SET NOCOUNT ON 確保僅傳回資料。

另一個效能瓶頸是使用ADODB.Recordset迭代資料。 這種方法可能會很慢。 更有效率的方法是將整個結果集檢索到一個陣列中進行後續處理。

經典 ASP 預存程序處理的最佳化方法:

以下步驟詳細介紹了在經典 ASP 中執行預存程序和檢索資料的最佳化方法:

  1. 實例化 ADODB.Command 建立 ADODB.Command 物件並使用有效的連接字串或 ADODB.Connection 物件建立連線。

  2. 設定指令屬性:CommandText 屬性設定為預存程序名稱,將 CommandType 屬性設為 adCmdStoredProc

  3. 管理參數: 如果預存程序接受參數,請使用 Parameters 集合新增它們,指定資料類型和方向(例如 adParamInput)。

  4. 執行並擷取資料:使用Execute方法執行指令。不直接處理記錄集,而是使用 GetRows 方法將整個結果集有效率地載入到二維數組中。

修訂後的程式碼範例:

這是一個示範這些改進的精煉程式碼範例:

<code class="language-vbscript">Const adParamInput = 1, adVarChar = 200
Dim conn_string, row, rows, ary_data

conn_string = "PROVIDER=SQLOLEDB;DATA SOURCE=X;DATABASE=Y;UID=Z;PWD=W;"

Set objCommandSec = CreateObject("ADODB.Command")
With objCommandSec
  .ActiveConnection = conn_string
  .CommandType = adCmdStoredProc
  .CommandText = "usp_Targets_DataEntry_Display"
  .Parameters.Append .CreateParameter("@userinumber", adVarChar, adParamInput, 10, inumber)
  .Parameters.Append .CreateParameter("@group", adVarChar, adParamInput, 50, "ISM")
  .Parameters.Append .CreateParameter("@groupvalue", adVarChar, adParamInput, 50, ismID)
  .Parameters.Append .CreateParameter("@targettypeparam", adVarChar, adParamInput, 50, targetType)

  Set rs = .Execute()
  If Not rs.EOF Then
    ary_data = rs.GetRows()
    rs.Close()
    Set rs = Nothing
  End If
End With
Set objCommandSec = Nothing

' Process data from the array
If IsArray(ary_data) Then
  rows = UBound(ary_data, 2)
  For row = 0 To rows
    Response.Write(ary_data(1, row) & "<br>") ' Example: Accessing the second column (index 1)
  Next
Else
  Response.Write("No data returned")
End If</code>

此修改後的程式碼有效地將資料檢索到陣列中,避免了記錄集迭代的效能開銷,從而在經典 ASP 中實現更快、更可靠的預存程序執行。 請記住在生產環境中適當處理潛在的錯誤。

以上是如何在經典 ASP 中有效執行預存程序並檢索結果?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn