IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Délégué et procedure stockée


Sujet :

C#

  1. #1
    Membre expérimenté Avatar de mayekeul
    Inscrit en
    Août 2005
    Messages
    1 369
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 1 369
    Points : 1 665
    Points
    1 665
    Par défaut Délégué et procedure stockée
    Bonjour,

    alors voici mon soucis

    Je récolte dans mon code une série de parametre pour lancer une procedure stockée dans mon serveur sql.

    Suivant les cas, la procedure à lancer sera différente mais les nombreux parametres eux restent identiques

    je me suis dis que je devrais faire appel à un délégué pour cela, pour m'éviter de retaper la longue série de parametre à envoyer à la procedure.

    Alors deux questions:
    - mon raisonnement est-il bon?
    - Comment faire car j'essaye mais ça ne fonctionne pas du tout.

    merci de votre aide

  2. #2
    Membre émérite Avatar de Guulh
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    2 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Points : 2 925
    Points
    2 925
    Par défaut
    Hello,
    ça doit pas être la peine.
    En gros, t'as un truc comme ça:
    - des proc stocks: nommées Machin, Bidule, Truc, Chose, Chouette
    - des paramètres tout pareils: 1, "toto", 3.14, 21-FEB-2048
    Je sais pas comment tu utilises ado.net pour appeler tes procs. Mais si tu le fais à la main, la seule chose qui changera, ce sera la IdbCommand.CommandText, qui contient le nom de la proc stock.

    Donc ta couche DAO ressemblerait à ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    enum Command { Machin, Bidule, Truc, Chose, Chouette }
    private string GetProcStockName(Command cmd)
    {
      // renvoie le nom de la proc stock
    }
    public void Execute(Command cmd, int param1, string param2, double param3, ...)
    {
      string procStockName = GetProcStockName(cmd);
      //... ton code usuel d'exécution de la proc stock
    }
    Et si par exemple t'as une GUI avec 5 boutons, chacune correspondant à une proc stock, t'aurais ça dans la méthode abonnée au clic de chaque bouton:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    private void OnClick1(object sender, EventArgs e)
    {
      coucheDAO.Execute(Commands.Machin, 1, "toto", 3.14, ...);
    }
     
    private void OnClick2(object sender, EventArgs e)
    {
      coucheDAO.Execute(Commands.Bidule, 1, "toto", 3.14, ...);
    }
    Pas besoin de délégué, donc.

  3. #3
    Membre expérimenté Avatar de mayekeul
    Inscrit en
    Août 2005
    Messages
    1 369
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 1 369
    Points : 1 665
    Points
    1 665
    Par défaut
    hello,

    merci de ta réponse

    je passe par le clr mais en gros mon code, pour l'instant, ressemble à ton exemple.

    C'est juste que il y a +/- 40 parametres à passer quoi
    donc a la lecture, ça fait un peu brouillon quand il apparait plusieurs fois

  4. #4
    Membre émérite Avatar de Guulh
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    2 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Points : 2 925
    Points
    2 925
    Par défaut
    Citation Envoyé par mayekeul Voir le message
    je passe par le clr mais en gros mon code, pour l'instant, ressemble à ton exemple.
    C'est à dire ?

    Citation Envoyé par mayekeul Voir le message
    C'est juste que il y a +/- 40 parametres à passer quoi
    donc a la lecture, ça fait un peu brouillon quand il apparait plusieurs fois
    Ah, c'est cette partie là que tu veux regrouper?
    Bon, je suppose que tu as un bouton par méthode.
    Tu te fais un dico qui associe à un bouton à une valeur d'enum:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    var mappings = new Dictionary<Button, Command>
    {
       { this.button1, Commands.Machin },
       { this.button2, Commands.Truc },
    ...
    }
    Tu abonnes les Clic de tous les boutons à cette méthode:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    private void OnClick(object sender, EventArgs e)
    {
       var command = this.mappings[(Button)sender)];
       coucheDAO.Execute(command, 1, "toto", 3.14, ...);
    }
    Et d'ailleurs, vu que les méthodes à 40 paramètres sont pas très lisibles, tu peux stocker tout ça dans un seul object (disons SuperParamètre), ca deviendra
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    private SuperParamètre GetParamètre()
    {
      return new SuperParamètre(1, "toto", ...);
    }
    private void OnClick(object sender, EventArgs e)
    {
       var command = this.mappings[(Button)sender)];
       var param = GetParamètre();
       coucheDAO.Execute(command, param);
    }

  5. #5
    Membre expérimenté Avatar de mayekeul
    Inscrit en
    Août 2005
    Messages
    1 369
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 1 369
    Points : 1 665
    Points
    1 665
    Par défaut
    bon finalement je réponds et sorry du délai
    Citation:
    Envoyé par mayekeul
    je passe par le clr mais en gros mon code, pour l'instant, ressemble à ton exemple.

    C'est à dire ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    private void OnClick1(object sender, EventArgs e)
    {
      Dataset.Procedure1( 1, "toto", 3.14, ...);
    }
     
    private void OnClick2(object sender, EventArgs e)
    {
      Dataset.Procedure2( 1, "toto", 3.14, ...);
    }
    et il faudra que j'essaye cette methode super parametre alors!

Discussions similaires

  1. Ecriture d'une procedure stockée XP
    Par WOLO Laurent dans le forum Langage SQL
    Réponses: 2
    Dernier message: 17/07/2003, 13h09
  2. Réponses: 1
    Dernier message: 04/06/2003, 11h48
  3. procedure stockée champ date
    Par tripper.dim dans le forum SQL
    Réponses: 5
    Dernier message: 25/04/2003, 09h47
  4. Appel a une procedure stockée en vba
    Par The_Nail dans le forum VBA Access
    Réponses: 36
    Dernier message: 01/04/2003, 16h44
  5. procedure stockée dans un dbbatch
    Par pram dans le forum XMLRAD
    Réponses: 4
    Dernier message: 07/02/2003, 16h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo