ホームページ >データベース >mysql チュートリアル >クラシック ASP のストアド プロシージャからデータを正しく取得するにはどうすればよいですか?

クラシック ASP のストアド プロシージャからデータを正しく取得するにはどうすればよいですか?

DDD
DDDオリジナル
2025-01-10 08:04:57776ブラウズ

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 中国語 Web サイトの他の関連記事を参照してください。

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