Déclaration : Cet article a été publié dans "Computer Applications" Volume 23 Issue 11
Résumé : Dans le développement de divers systèmes, l'utilisation de procédures stockées est une bonne habitude, qui apporte non seulement des fonctionnalités telles que des tables temporaires, des fonctions et des curseurs, mais également Le débogage, la mise à niveau et la maintenance deviennent pratiques. Cependant, presque tous les appels de procédures stockées sont dans le même mode et la principale différence est que les paramètres de chaque procédure stockée sont différents. Alors, est-il possible d’utiliser une méthode pour unifier tous les appels de procédures stockées et réduire la programmation inutile ? Sur la base de l'étude de la base de données SQL Server et d'ASP.NET, nous avons implémenté une méthode d'appel unifiée. Cette méthode doit uniquement fournir le nom de la procédure stockée à appeler et fournir des valeurs de paramètres spécifiques lors de l'appel, afin que toute procédure stockée soit stockée. la procédure peut être appelée.
Mots-clés : procédure stockée, table système, vue structure de l'information, ADO.NET Code d'identification du document : ② Rapport de réalisation technique pratique (technologie), synthèse des apprentissages théoriques et pratiques sociales (sciences sociales)
Appeler les procédures stockées de la même manière dans .NET
Résumé : L'utilisation de procédures stockées est une bonne habitude dans le développement de projets. Elle fournit une table temporaire, des fonctions et des curseurs, et le débogage, la mise à niveau et la maintenance peuvent également en bénéficier. Cependant, presque tous les appels à une procédure stockée sont le même modèle, le principal. La différence entre eux réside dans les paramètres de chaque procédure stockée. Ensuite, pouvons-nous appeler la procédure stockée de la même manière malgré leurs différences et réduire le code de programmation. Nous l'avons fait après avoir étudié SQL Server et .NET. Seules les informations que vous fournissez sont celles-ci. nom de la procédure stockée et les valeurs de ses paramètres, vous n'avez pas besoin de créer les paramètres vous-même Mot clé : Procédure Stord, Table système, Schéma d'information, ADO.NET
Résumé : Dans le développement d'un projet, vous appelez souvent le. procédures stockées. Cependant, presque tous les appels de procédures stockées suivent le même modèle. La principale différence réside dans le type et la valeur de chaque paramètre créé. Alors, est-il possible d'appeler toutes les procédures stockées via une seule fonction (ou classe) ? Cet article implémente une méthode d'appel unifiée basée sur le principe d'utilisation des tables système fournies par la base de données. Cette méthode doit uniquement fournir le nom de la procédure stockée à appeler, et fournir des valeurs de paramètres spécifiques lors de l'appel, afin que tout soit disponible. une procédure stockée peut être appelée.
Résumé : Nous devons appeler des procédures stockées des systèmes de bases de données lors du développement d'un projet. Cependant, l'appel d'une procédure stockée est presque la même, la principale différence est la différence entre le type ou la valeur des paramètres, etc. Pouvons-nous appeler n'importe quelle procédure stockée via une fonction (ou une classe) ? Sur la base des tables système fournies par les systèmes de bases de données, nous avons écrit une classe pour appeler n'importe quelle procédure stockée dans cet article. Pour appeler une procédure stockée, les seuls paramètres que vous fournissez sont le nom de la procédure stockée et. la valeur de tous les paramètres de la procédure stockée.
<DIV class=text4><B>1. Introduction</B></DIV>
Dans le développement de divers systèmes, l'utilisation de procédures stockées est une bonne habitude. Cela apporte non seulement des fonctionnalités telles que des tables temporaires, des fonctions et des curseurs, mais facilite également le débogage, les mises à niveau et la maintenance. Pendant le processus de stockage, les données peuvent être traitées puis restituées, ce qui peut fournir davantage d'analyse et de contrôle des données. Dans les appels de procédure stockée, nous avons constaté que les appels de procédure stockée suivent presque le modèle suivant :
1. Déclarer SqlConnection
2. Déclarez SqlCommand et définissez sa propriété Connection sur l'instance SqlConnection qui vient d'être déclarée, définissez CommandName sur le nom de la procédure stockée et CommandType sur la procédure stockée.
3. Ajoutez tous les paramètres requis pour les appels de procédure stockée à la collection Parameters de l'instance SqlCommand qui vient d'être déclarée 4. Appelez la méthode ExecuteReader() de SqlCommand pour obtenir l’ensemble de lignes renvoyé par la procédure stockée.
4. Déclarez SqlDataAdapter et DataSet, définissez la propriété SelectCommand de SqlDataAdapter sur l'instance déclarée en 3, puis appelez sa méthode Fill pour remplir l'ensemble de lignes renvoyé dans le DataSet.
5. Fermez l'objet SqlConnection
6. Libérez chaque instance d'objet déclarée (Remarque : 4 fait référence aux deux méthodes d'extraction de données). Au cours de ce processus d'appel, nous avons constaté que presque tous les appels de procédure stockée sont dans ce mode. La différence réside dans le stockage à l'étape 2. Les différents noms de processus. sont différents des paramètres utilisés dans chaque appel de procédure stockée à l'étape 3. Ils présentent des différences dans les noms de paramètres, les directions, les types de données, les longueurs, etc. Alors, existe-t-il un moyen d’implémenter tous les appels de procédures stockées ? Autrement dit, il vous suffit de fournir le nom de la procédure stockée, puis de transmettre les valeurs des paramètres dans la méthode appelante pour réaliser l'appel de la procédure stockée, puis d'utiliser certaines structures de données pour enregistrer l'ensemble de lignes renvoyé, les valeurs des paramètres sortantes et traiter les valeurs de retour. Après avoir étudié les tables système de SQL Server, nous avons constaté que cette idée était réalisable.
2. Tables système et vues de la structure de l'information
Les bases de données relationnelles telles que SQL Server stockent les métadonnées dans la base de données d'une manière ou d'une autre. Dans SQL Server, il s'agit de la base de données système et des tables système. Après l'installation de SQL Server, quatre bases de données système seront automatiquement générées : master, model, msdb et tempdb. La base de données principale est l'entrepôt de toutes les informations au niveau du système dans SQL Server. Les comptes de connexion, les paramètres de configuration, les procédures stockées du système et l'existence d'autres bases de données sont enregistrés dans la base de données principale. La base de données msdb stocke les informations de l'agent SQL Server. Lorsque les tâches, les opérateurs et les alertes sont définis, ils sont stockés dans msdb. model est un modèle pour toutes les bases de données générées par l'utilisateur. Lors de la génération d'une nouvelle base de données, copiez le modèle et créez les objets requis. tempdb enregistre les objets temporaires dans SQL Server. Afficher les tables temporaires générées et les procédures stockées temporaires ainsi que les objets temporaires générés par le système utilisent tous tempdb. [1] Et chaque base de données possède ses propres tables système. Ces tables système sont utilisées pour stocker les informations de configuration et d'objet. À partir de ces tables système, nous pouvons obtenir des informations sur tous les paramètres de chaque procédure stockée. Ces informations sont stockées dans la table syscolumns. Il existe des noms de paramètres, des types, des longueurs, des directions, etc. qui doivent être utilisés dans notre méthode. Cependant, les champs des tables système changeront avec la version de SQL Server. Par exemple, type et xtype dans syscolumns sont un exemple de tels changements. Ils stockent tous deux des informations de type. Pour adapter notre méthode aux changements de version de SQL Server, nous devons utiliser la vue structure de l'information. ANSI-92 définit les vues de structure de l'information comme un ensemble de vues qui fournissent des données système. En tirant parti de cette vue, vous pouvez masquer les tables système réelles de votre application. Les modifications apportées aux tables système n'affecteront pas les applications, celles-ci peuvent donc être indépendantes des fournisseurs et des versions de bases de données. [1] ANSI-92 et SQL Server prennent en charge l'utilisation d'une structure de dénomination à trois segments pour référencer des objets sur le serveur local. La terminologie ANSI-92 s'appelle catalog.schema.object, tandis que SQL Server l'appelle database.owner.object. [1] Par exemple, si nous voulons trouver toutes les informations sur les paramètres de toutes les procédures stockées, nous pouvons utiliser : select * from INFORMATION_SCHEMA.PARAMETERS Si nous voulons trouver toutes les informations sur les paramètres d'une certaine procédure stockée, c'est : select. * from INFORMATION_SCHEMA.PARAMETERS où SPECIFIC_NAME ='Proc1 ' Avec la vue structure de l'information, plus de la moitié de nos problèmes ont été résolus. Nous verrons ensuite comment implémenter notre méthode dans .NET.
3. L'objectif de la méthode d'implémentation est de savoir comment obtenir toutes les informations sur les paramètres de la procédure stockée en fonction de son nom, puis créer automatiquement chaque paramètre en fonction de ces informations sur les paramètres. Afin d'automatiser ces actions, le processus de déclaration de SqlConnection, SqlCommand et SqlParameter, ainsi que le processus de création de chaque SqlParameter doivent être invisibles pour l'utilisateur. La seule chose que l'utilisateur doit fournir est le nom de la procédure stockée, puis fournit divers paramètres lors de l'appel, et même leurs types n'ont pas besoin d'être fournis.
3.1 Obtention et création des paramètres de la procédure stockée Comment obtenir et créer les paramètres de la procédure stockée à appeler est un point clé Nous pouvons implémenter automatiquement cette étape via la vue structure de l'information.
// Récupère et crée les paramètres de la procédure stockée
private void GetProcedureParameter(params object[] settings)
{ SqlCommand myCommand2 = new SqlCommand();
myCommand2.Connection = this.myConnection;
"select * from INFORMATION_SCHEMA.PARAMETERS où SPECIFIC_NAME = '" + this.ProcedureName + "' commander par ORDINAL_POSITION";
SqlDataReader reader = null; reader = myCommand2.ExecuteReader(); // Créer un paramètre de retour
myParameter = new SqlParameter();
myParameter.ParameterName = "@Value";
myParameter . SqlDbType = SqlDbType.Int;
myParameter.Direction = ParameterDirection.ReturnValue;
myCommand.Parameters.Add(myParameter);
// Créez ici chaque paramètre, la valeur, la direction et d'autres attributs.
while(reader.Read())
{
myParameter = new SqlParameter();
myParameter.ParameterName = reader["PARAMETER_NAME"].ToString();
myParameter.Direction = reader["PARAMETER_MODE"].ToString()=="IN" ?ParameterDirection.Input:ParameterDirection.Output;
switch(reader["DATA_TYPE"].ToString()) {
case "int" :
if(myParameter.Direction == ParameterDirection.Input)
myParameter.Value = (int)parameters[i] ;
myParameter.SqlDbType=
SqlDbType.Int
; //... de nombreux traitements de types spécifiques sont omis
par défaut : break }
myCommand.Parameters.Add
(
myParameter);
3.2 Renvoie l'ensemble de données de résultat, la valeur de retour et l'ensemble de paramètres sortants. Après avoir créé les paramètres de la procédure stockée, nous pouvons appeler la procédure stockée. Parce que dans .NET, les classes couramment utilisées qui renvoient des jeux de résultats sont SqlDataReader et DataSet, et SqlDataReader ne peut être utilisé que tout en maintenant une connexion, mais pas DataSet. Dans notre implémentation, la connexion doit être déconnectée après l'appel, donc un DataSet est utilisé pour enregistrer l'ensemble de résultats renvoyé.
public SqlResult Call(params object[] settings){ // SqlResult est une classe auto-définie utilisée pour enregistrer les ensembles de données de résultats, les valeurs de retour et les ensembles de paramètres sortants SqlResult result = new SqlResult(); nécessaire String
myConnection = new SqlConnection(ConnectionString);
myCommand = new SqlCommand(this.ProcedureName, myConnection);
myCommand.CommandType = CommandType.StoredProcedure;
myAdapter = new SqlDataAdapter(
myCommand.Open(); Stockez les paramètres de la procédure et définissez les valeurs
GetProcedureParameter(parameters);
myAdapter.Fill(result.dataSet, "Table"); // Récupère la valeur du paramètre sortant et le nom de la procédure stockée et l'enregistre dans une table de hachage; GetOutputValue(result) ; // Libérez diverses ressources ici et déconnectez
myAdapter.Dispose();
myCommand.Dispose()
;
myConnection.Dispose
();
4. Travaux complémentaires Bien que notre implémentation ici concerne la base de données SQL Server, cette méthode peut être utilisée pour toute base de données qui fournit des vues de structure d'information, est conforme à la norme ANSI-92 ou fournit des métadonnées. Nous l'encapsulons dans une classe SqlProcedure et la procédure stockée peut être facilement appelée en cas de besoin, réduisant ainsi beaucoup de travail de code fondamentalement répétitif. Pour que la classe SqlProcedure prenne en charge davantage de types de données, dans la méthode GetProcedureParameter(), vous devez analyser le type, la direction, la longueur, la valeur par défaut et d'autres informations de chaque paramètre en fonction de vos propres besoins, puis créer ce paramètre. Fondamentalement, n'importe quel type peut être implémenté, même les types d'images peuvent être créés de cette manière. De cette façon, le cours peut être très général et utile dans n’importe quel projet.
Références
[1] Ray Rankins, Paul Jensen, Paul Bertucci, SQL Server 2000 Practical Book, Pékin : Electronic Industry Press, 2002
[2] MSDN Library janvier 2003, Microsoft Corporation.
À propos de l'auteur : Liu Zhibo (1979-), homme, de Xinhua, Hunan, maîtrise, principales orientations de recherche : réseau neuronal et reconnaissance de formes, système d'information bureautique.
email:[email protected]