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
Libérer: 2025-01-10 08:04:57
original
795 Les gens l'ont consulté

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 :

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)
Copier après la connexion

La solution : gestion correcte des jeux d'enregistrements

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

rs = objCommandSec.Execute
Copier après la connexion

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

set rs = Server.CreateObject("ADODB.RecordSet")
rs.open objCommandSec
Copier après la connexion

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 de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal