經典 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中文網其他相關文章!