Adresse originale : http://www.51la.org/webjx/htmldata/2005-12-24/1135405777.html
Résumé Les appels de procédures stockées sont couramment utilisés dans les systèmes b/s. La méthode d'appel traditionnelle est non seulement lente, mais le code continuera à s'étendre à mesure que le nombre de procédures stockées augmentera, ce qui rendra sa maintenance difficile. La nouvelle méthode résout ces problèmes dans une certaine mesure.
Mots-clés asp.net ; procédures stockées Dans le processus d'utilisation de .net, l'accès à la base de données est une partie très importante, en particulier dans le processus de construction du système b/s, le fonctionnement de la base de données est presque devenu une opération essentielle. L'appel de procédures stockées pour implémenter des opérations de base de données est une méthode utilisée par de nombreux programmeurs, et la plupart des programmeurs utilisent des procédures stockées s'ils le peuvent, et utilisent rarement des instructions SQL directement, les procédures stockées sont donc très utiles et importantes.
Introduction aux procédures stockées
En termes simples, une procédure stockée est une procédure encapsulée composée de quelques instructions SQL et instructions de contrôle. Elle réside dans la base de données et peut être appelée par une application client ou depuis une autre procédure ou déclencheur. Ses paramètres peuvent être transmis et renvoyés. Semblables aux procédures fonctionnelles d’une application, les procédures stockées peuvent être appelées par leur nom et elles ont également des paramètres d’entrée et de sortie.
Selon les différents types de valeurs de retour, nous pouvons diviser les procédures stockées en trois catégories : les procédures stockées qui renvoient des jeux d'enregistrements, les procédures stockées qui renvoient des valeurs numériques (également appelées procédures stockées scalaires) et les procédures stockées comportementales. Comme son nom l'indique, le résultat de l'exécution d'une procédure stockée qui renvoie un jeu d'enregistrements est un jeu d'enregistrements. Un exemple typique consiste à récupérer des enregistrements qui remplissent une ou plusieurs conditions dans la base de données. Une procédure stockée qui renvoie une valeur numérique renvoie une valeur. après exécution, par exemple, dans la base de données Exécuter une fonction ou une commande avec une valeur de retour enfin, la procédure stockée comportementale n'est utilisée que pour implémenter une certaine fonction de la base de données sans valeur de retour, comme les opérations de mise à jour et de suppression dans la base de données ; .
Avantages de l'utilisation de procédures stockées
Par rapport à l'utilisation directe d'instructions SQL, l'appel direct de procédures stockées dans une application présente les avantages suivants :
(1) Réduire le trafic réseau. Il n'y a peut-être pas de grande différence de trafic réseau entre l'appel d'une procédure stockée avec un petit nombre de lignes et l'appel direct d'instructions SQL. Cependant, si la procédure stockée contient des centaines d'instructions SQL, ses performances sont nettement meilleures que l'appel d'instructions SQL une par une. un. beaucoup plus élevé.
(2) La vitesse d'exécution est plus rapide. Il y a deux raisons : premièrement, lorsque la procédure stockée est créée, la base de données l'a déjà analysée et optimisée une fois. Deuxièmement, une fois la procédure stockée exécutée, une copie de la procédure stockée sera conservée dans la mémoire, de sorte que la prochaine fois que la même procédure stockée sera exécutée, elle pourra être appelée directement depuis la mémoire.
(3) Adaptabilité plus forte : étant donné que les procédures stockées accèdent à la base de données via des procédures stockées, les développeurs de bases de données peuvent apporter des modifications à la base de données sans modifier l'interface de la procédure stockée, et ces modifications n'affecteront pas les applications de base de données.
(4) Travail distribué : le travail de codage de l'application et de la base de données peut être effectué indépendamment sans se supprimer mutuellement.
De l’analyse ci-dessus, nous pouvons voir qu’il est nécessaire d’utiliser des procédures stockées dans les applications.
Deux méthodes différentes d'appel de procédures stockées
Afin de mettre en évidence les avantages de la nouvelle méthode, introduisons d'abord la méthode « officielle » d'appel de procédures stockées dans .net. De plus, tous les exemples de programmes présentés dans cet article fonctionnent sur la base de données sqlserver. Les autres situations sont similaires et ne seront pas expliquées une par une dans le futur. Tous les exemples de cet article sont en langage C#.
Pour accéder à la base de données dans une application, les étapes générales sont les suivantes : déclarez d'abord une connexion à la base de données sqlconnection, puis déclarez une commande de base de données sqlcommand pour exécuter des instructions SQL et des procédures stockées. Avec ces deux objets, vous pouvez utiliser différentes méthodes d’exécution pour atteindre vos objectifs selon vos propres besoins. Ce qu'il faut ajouter, c'est n'oubliez pas d'ajouter l'instruction de référence suivante à la page : using system.data.sqlclient.
En ce qui concerne l'exécution de procédures stockées, si le premier type de procédure stockée est exécuté, alors un adaptateur de données doit être utilisé pour remplir les résultats dans un ensemble de données, puis le contrôle de grille de données peut être utilisé pour présenter les résultats sur la page ; si l'exécution S'il s'agit des deuxième et troisième procédures stockées, cette procédure n'est pas nécessaire. Il vous suffit de déterminer si l'opération est terminée avec succès en fonction du retour spécifique.
(1) Le code pour exécuter une procédure stockée sans paramètres est le suivant :
sqlconnection conn=new sqlconnection("connectionstring");
sqldataadapter da = new sqldataadapter();
da.selectcommand = new sqlcommand();
da.selectcommand.connection = conn;
da.selectcommand.commandtext = "nom de la procédure" ;
da.selectcommand.commandtype = commandtype.storedprocedure ;
Ensuite, choisissez simplement la manière appropriée d’effectuer le processus ici à différentes fins.
(2) Le code pour exécuter une procédure stockée avec des paramètres est le suivant (nous pouvons déclarer la fonction qui appelle la procédure stockée comme exeprocedure(string inputdate)) :
sqlconnection conn=new sqlconnection("connectionstring");
sqldataadapter da = new sqldataadapter();
da.selectcommand = new sqlcommand();
da.selectcommand.connection = conn;
da.selectcommand.commandtext = "nom de la procédure" ;
da.selectcommand.commandtype = commandtype.storedprocedure ;
(Le code ci-dessus est le même, voici le code à ajouter)
param = new sqlparameter("@parametername", sqldbtype.datetime);
param.direction = paramètredirection.input;
param.value = convert.todatetime(inputdate);
da.selectcommand.parameters.add(param);
Cela ajoute un paramètre d'entrée. Si vous devez ajouter des paramètres de sortie :
param = new sqlparameter("@parametername", sqldbtype.datetime);
param.direction = paramètredirection.output;
param.value = convert.todatetime(inputdate);
da.selectcommand.parameters.add(param);
Pour obtenir la valeur de retour d'une procédure stockée de paramètre :
param = new sqlparameter("@parametername", sqldbtype.datetime);
param.direction = paramètredirection.returnvalue ;
param.value = convert.todatetime(inputdate);
da.selectcommand.parameters.add(param);
À partir du code ci-dessus, nous pouvons voir que lorsqu'il y a beaucoup de procédures stockées ou qu'il y a beaucoup de paramètres dans les procédures stockées, cette méthode affectera grandement la vitesse de développement, mais si le projet est relativement volumineux, alors ces fonctions sont utiles ; la logique de la base de données sera également un gros fardeau pour la maintenance future. Alors, existe-t-il une meilleure façon de résoudre ce problème ? Je pensais que lors de l'exécution d'une procédure stockée sans paramètres, il suffisait de passer le nom d'une procédure stockée pour appeler la procédure stockée correspondante, et dans la base de données sqlserver, on pouvait directement taper le "nom de la procédure stockée (liste des paramètres) " dans l'analyseur de requêtes. Les procédures stockées peuvent être exécutées avec de telles chaînes. Alors, cette idée peut-elle être appliquée aux applications ?
Tapez donc le code correspondant dans le compilateur. Ces codes sont modifiés en fonction du code qui appelle la procédure stockée sans paramètres. Le code spécifique est le suivant :
sqlconnection conn=new sqlconnection("connectionstring");
sqldataadapter da = new sqldataadapter();
da.selectcommand = new sqlcommand();
da.selectcommand.connection = conn;
da.selectcommand.commandtext = "nameofprocedure('para1','para2',para3)";
da.selectcommand.commandtype = commandtype.storedprocedure ;
Afin de rendre le code plus représentatif, les premier et deuxième paramètres de la procédure stockée à appeler sont de type chaîne, et le troisième paramètre est de type entier. Après exécution, j'ai constaté que les résultats escomptés pouvaient être atteints !
Comparaison des deux méthodes d'appel Grâce à la comparaison, nous pouvons voir que la deuxième méthode présente un avantage évident, c'est-à-dire qu'elle peut augmenter la vitesse de développement, gagner du temps de développement, et le code est facile à maintenir, et elle réduit également la taille du système dans une certaine mesure. Cependant, le traitement des paramètres d'une procédure stockée étant relativement général, si vous souhaitez obtenir des paramètres de sortie ou obtenir la valeur de retour d'une procédure stockée, cette méthode ne peut pas répondre aux besoins. Néanmoins, cette méthode peut permettre aux développeurs de sauvegarder une grande partie du code. Si vous n'avez pas besoin d'obtenir les paramètres de sortie et les valeurs de retour, vous pouvez presque le faire "une fois pour toutes". Par conséquent, dans le développement réel de programmes, cette méthode a encore une certaine valeur pratique.