ホームページ >データベース >mysql チュートリアル >従来の ASP でストアド プロシージャを効率的に実行し、結果を取得する方法
クラシック ASP ストアド プロシージャの実行と結果の取得: ベスト プラクティス
従来の ASP 開発者は、SQL Server ストアド プロシージャを使用するときに、特に結果の取得に関して課題に遭遇することがよくあります。 プロシージャがデータを返す必要がある場合でも、空の応答や閉じられたレコードセットは一般的な問題です。 これは多くの場合、重要な SQL Server 設定の見落としや、ASP コード内での非効率なデータ処理に起因します。
結果が空になるよくある原因の 1 つは、ストアド プロシージャで SET NOCOUNT ON
の使用を怠っていることです。 デフォルトでは、SQL Server は影響を受ける行数を返すため、実際の結果セットに影響を与える可能性があります。 SET NOCOUNT ON
は、データのみが返されることを保証します。
もう 1 つのパフォーマンスのボトルネックは、ADODB.Recordset
を使用したデータの反復処理です。 このアプローチは時間がかかる可能性があります。 より効率的な方法は、後続の処理のために結果セット全体を配列に取得することです。
クラシック ASP ストアド プロシージャ処理の最適化されたアプローチ:
次の手順では、クラシック ASP でストアド プロシージャを実行し、データを取得するための最適化された方法を詳しく説明します。
Instantiate ADODB.Command
: ADODB.Command
オブジェクトを作成し、有効な接続文字列または ADODB.Connection
オブジェクトを使用して接続を確立します。
コマンド プロパティの構成: CommandText
プロパティをストアド プロシージャ名に設定し、CommandType
プロパティを adCmdStoredProc
に設定します。
パラメータの管理: ストアド プロシージャがパラメータを受け入れる場合、Parameters
コレクションを使用してパラメータを追加し、データ型と方向 (例: adParamInput
) を指定します。
データの実行と取得: Execute
メソッドを使用してコマンドを実行します。レコードセットを直接処理する代わりに、GetRows
メソッドを使用して、結果セット全体を 2 次元配列に効率的にロードします。
改訂されたコード例:
これらの改善点を示す洗練されたコード例を次に示します。
<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 中国語 Web サイトの他の関連記事を参照してください。