ホームページ >データベース >mysql チュートリアル >従来の ASP でストアド プロシージャを効率的に実行し、結果を取得する方法

従来の ASP でストアド プロシージャを効率的に実行し、結果を取得する方法

Susan Sarandon
Susan Sarandonオリジナル
2025-01-10 10:22:41375ブラウズ

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

クラシック ASP ストアド プロシージャの実行と結果の取得: ベスト プラクティス

従来の ASP 開発者は、SQL Server ストアド プロシージャを使用するときに、特に結果の取得に関して課題に遭遇することがよくあります。 プロシージャがデータを返す必要がある場合でも、空の応答や閉じられたレコードセットは一般的な問題です。 これは多くの場合、重要な SQL Server 設定の見落としや、ASP コード内での非効率なデータ処理に起因します。

結果が空になるよくある原因の 1 つは、ストアド プロシージャで SET NOCOUNT ON の使用を怠っていることです。 デフォルトでは、SQL Server は影響を受ける行数を返すため、実際の結果セットに影響を与える可能性があります。 SET NOCOUNT ON は、データのみが返されることを保証します。

もう 1 つのパフォーマンスのボトルネックは、ADODB.Recordset を使用したデータの反復処理です。 このアプローチは時間がかかる可能性があります。 より効率的な方法は、後続の処理のために結果セット全体を配列に取得することです。

クラシック ASP ストアド プロシージャ処理の最適化されたアプローチ:

次の手順では、クラシック ASP でストアド プロシージャを実行し、データを取得するための最適化された方法を詳しく説明します。

  1. Instantiate ADODB.Command: ADODB.Command オブジェクトを作成し、有効な接続文字列または ADODB.Connection オブジェクトを使用して接続を確立します。

  2. コマンド プロパティの構成: CommandText プロパティをストアド プロシージャ名に設定し、CommandType プロパティを adCmdStoredProc に設定します。

  3. パラメータの管理: ストアド プロシージャがパラメータを受け入れる場合、Parameters コレクションを使用してパラメータを追加し、データ型と方向 (例: adParamInput) を指定します。

  4. データの実行と取得: 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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。