Maison >base de données >tutoriel mysql >Comment récupérer correctement les données des procédures stockées dans ASP classique ?

Comment récupérer correctement les données des procédures stockées dans ASP classique ?

DDD
DDDoriginal
2025-01-10 08:04:57778parcourir

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

ASP classique et procédures stockées : récupération efficace des données

La récupération de données à partir de procédures stockées dans les applications ASP classiques présente souvent des défis. Cet article traite d'un problème courant où l'exécution d'une procédure stockée ne parvient pas à remplir un jeu d'enregistrements, ce qui entraîne une réponse vide ou incorrecte.

Le problème : les jeux d'enregistrements vides

Les développeurs rencontrent fréquemment des situations dans lesquelles leur code ASP classique, conçu pour récupérer les données d'une procédure stockée, renvoie un jeu d'enregistrements vide. La commande de base de données semble correcte, pourtant les données attendues restent inaccessibles.

Exemple de code et analyse

Examinons un extrait de code typique illustrant ce problème :

<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>

La solution : gestion correcte des jeux d'enregistrements

Le cœur du problème réside dans cette ligne :

<code class="language-asp">rs = objCommandSec.Execute</code>

Cette affectation incorrecte empêche une récupération correcte des données. L'approche corrigée est :

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

En utilisant rs.open objCommandSec, nous ouvrons correctement le jeu d'enregistrements à l'aide de l'objet de commande, permettant la récupération des données.

Meilleures pratiques pour l'interaction des procédures stockées

Voici quelques pratiques recommandées pour améliorer l'efficacité et la fiabilité de votre code ASP classique interagissant avec les procédures stockées :

  • Connexion directe au sein de la commande : Au lieu de créer et d'ouvrir un ADODB.Connection séparé, attribuez directement la chaîne de connexion à la propriété .ActiveConnection de l'objet ADODB.Command. Cela simplifie le code et améliore les performances.

  • SET NOCOUNT ON : Pour les procédures stockées effectuant des opérations INSERT ou UPDATE, incluez SET NOCOUNT ON dans votre code SQL. Cela empêche la procédure stockée de renvoyer un nombre de lignes affectées, ce qui peut conduire à un jeu d'enregistrements fermé prématurément.

  • Considérez les tableaux pour plus de simplicité : Pour une gestion plus simple des données, envisagez d'utiliser des tableaux au lieu de ADODB.Recordset pour parcourir les résultats. Cela peut souvent conduire à un code plus efficace et plus lisible.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn