首頁 > 資料庫 > mysql教程 > 如何在經典 ASP 中正確從預存程序中檢索資料?

如何在經典 ASP 中正確從預存程序中檢索資料?

DDD
發布: 2025-01-10 08:04:57
原創
774 人瀏覽過

How to Correctly Retrieve Data from Stored Procedures in Classic ASP?

經典 ASP 與預存程序:高效率的資料擷取

從經典 ASP 應用程式中的預存程序檢索資料通常會帶來挑戰。本文解決了預存程序執行無法填入記錄集、導致空響應或不正確回應的常見問題。

問題:空白記錄集

開發人員經常遇到這樣的情況:他們的經典 ASP 程式碼(設計用於從預存程序檢索資料)傳回空記錄集。 資料庫命令顯示正確,但預期資料仍然無法存取。

程式碼範例與分析

讓我們檢查一下說明此問題的典型程式碼片段:

<code class="language-asp">Set conn = Server.CreateObject("ADODB.Connection")
conn.open "PROVIDER=SQLOLEDB;DATA SOURCE=X;DATABASE=Y;UID=Z;PWD=W;"
Set objCommandSec = CreateObject("ADODB.Command")
With objCommandSec
    Set .ActiveConnection = Conn
    .CommandType = 4
    .CommandText = "usp_Targets_DataEntry_Display"
    .Parameters.Append .CreateParameter("@userinumber ", 200, 1, 10, inumber)
    .Parameters.Append .CreateParameter("@group ", 200, 1, 50, "ISM")
    .Parameters.Append .CreateParameter("@groupvalue", 200, 1, 50, ismID)
    .Parameters.Append .CreateParameter("@targettypeparam ", 200, 1, 50, targetType)
End With

set rs = Server.CreateObject("ADODB.RecordSet")
rs = objCommandSec.Execute

while not rs.eof
    response.write (1)
    response.write (rs("1_Q1"))
    rs.MoveNext
wend
response.write (2)</code>
登入後複製

解:正確的記錄集處理

核心問題就在這一行:

<code class="language-asp">rs = objCommandSec.Execute</code>
登入後複製

這種不正確的分配會妨礙正確的資料檢索。正確的做法是:

<code class="language-asp">set rs = Server.CreateObject("ADODB.RecordSet")
rs.open objCommandSec</code>
登入後複製

透過使用rs.open objCommandSec,我們可以使用命令物件正確開啟記錄集,從而實現資料檢索。

預存程序互動的最佳實務

以下是一些建議的做法,可提高經典 ASP 程式碼與預存程序互動的效率與可靠性:

  • 指令內的直接連接: 無需建立和開啟單獨的 ADODB.Connection,而是直接將連接字串指派給 .ActiveConnection 物件的 ADODB.Command 屬性。這簡化了程式碼並提高了效能。

  • SET NOCOUNT ON: 執行 INSERT 或 UPDATE 作業的預存程序,請在 SQL 程式碼中包含 SET NOCOUNT ON。這可以防止預存程序傳回受影響行的計數,從而導致過早關閉記錄集。

  • 考慮使用陣列來簡化:為了更簡單的資料處理,請考慮使用陣列而不是 ADODB.Recordset 來迭代結果。 這通常可以帶來更有效率、更可讀的程式碼。

以上是如何在經典 ASP 中正確從預存程序中檢索資料?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板