Maison >base de données >tutoriel mysql >Comment récupérer correctement les données des procédures stockées dans ASP classique ?
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!