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

Windows Forms Discussion :

Optimiser insertcommand et updatecommand


Sujet :

Windows Forms

  1. #1
    Membre averti
    Inscrit en
    Février 2008
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 26
    Par défaut Optimiser insertcommand et updatecommand
    Bonjour, j'ais un code que je pense possible d'optimiser mais je ne vois pas comment, le code est en fait composer de deux partie , updatecommand et insertcommand il s'agit de la meme chose, mais je vois pas comment créer un seuk blok voir moins.
    Merci pour votre aide.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
     if (id_pays.Equals("4"))
                {
                    insertCommand.Parameters.Add("@tva", SqlDbType.VarChar, 250, "tva");
                    insertCommand.Parameters.Add("@" + Dest_Prov, SqlDbType.NVarChar, 250, Dest_Prov);
                }
     
     
                else if (id_pays.Equals("5"))
                {
                    insertCommand.Parameters.Add("@Provenance", SqlDbType.VarChar, 250, "Provenance");
                    insertCommand.Parameters.Add("@Destination", SqlDbType.VarChar, 250, "Destination");
                }
                else if (id_pays.Equals("1"))
                {
                                   insertCommand.Parameters.Add("@regime_fr", SqlDbType.VarChar, 250, "Régime");
                    insertCommand.Parameters.Add("@nature_fr", SqlDbType.VarChar, 250, "Nature");
                }
                else if (id_pays != "5")
                    insertCommand.Parameters.Add("@transport", SqlDbType.NVarChar, 1, "transport");
                else
                {
                                    insertCommand.Parameters.Add("@" + Dest_Prov, SqlDbType.NVarChar, 250, Dest_Prov);
                    insertCommand.Parameters.Add("@regime", SqlDbType.VarChar, 250, "Régime");
                    insertCommand.Parameters.Add("@nature", SqlDbType.VarChar, 250, "Nature");
                                    insertCommand.Parameters.Add("@dept", SqlDbType.VarChar, 250, "dept");
                    insertCommand.Parameters.Add("@origine", SqlDbType.VarChar, 250, "origine");
                }
    			// Partie insert qui ressemble à l'identique au updatecommand
     
    			 if (id_pays.Equals("4"))
                {
                    updateCommand.Parameters.Add("@tva", SqlDbType.VarChar, 250, "tva");
                    updateCommand.Parameters.Add("@" + Dest_Prov, SqlDbType.NVarChar, 250, Dest_Prov);
                }
     
                           else if (id_pays.Equals("5"))
                {
                    updateCommand.Parameters.Add("@Provenance", SqlDbType.VarChar, 250, "Provenance");
                    updateCommand.Parameters.Add("@Destination", SqlDbType.VarChar, 250, "Destination");
                }
                else if (id_pays.Equals("1"))
                {
                                   updateCommand.Parameters.Add("@regime_fr", SqlDbType.VarChar, 250, "Régime");
                    updateCommand.Parameters.Add("@nature_fr", SqlDbType.VarChar, 250, "Nature");
                }
                else if (id_pays != "5")
                    updateCommand.Parameters.Add("@transport", SqlDbType.NVarChar, 1, "transport");
                else
                {
                    // Pour les autres pays on met à jour soit la colonne "Provenance" ou "Destination".
                    updateCommand.Parameters.Add("@" + Dest_Prov, SqlDbType.NVarChar, 250, Dest_Prov);
                    updateCommand.Parameters.Add("@regime", SqlDbType.VarChar, 250, "Régime");
                    updateCommand.Parameters.Add("@nature", SqlDbType.VarChar, 250, "Nature");
                                   updateCommand.Parameters.Add("@dept", SqlDbType.VarChar, 250, "dept");
                    updateCommand.Parameters.Add("@origine", SqlDbType.VarChar, 250, "origine");
                }

  2. #2
    Membre averti
    Inscrit en
    Février 2008
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 26
    Par défaut
    Devrais-je creer un objet pour chaque colonne?

  3. #3
    Membre Expert
    Avatar de olsimare
    Inscrit en
    Décembre 2006
    Messages
    1 185
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 185
    Par défaut
    Bonjour.

    Pourquoi ne pas créer un procédure qui prend en paramétre une commande et id_pays et qui se charge d'ajouter les paramétres de la requête à cette commande ?

    Cdt.

  4. #4
    Membre averti
    Inscrit en
    Février 2008
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 26
    Par défaut
    Bonjour,
    Merci pour ta réponse, tu veux dire que je devrais créer une procédure stockée pour effectuer ce traitement, j'aurais donc la meme chose mais du coté de la base de donnée.
    Certe on y verrait plus claire.
    Si c'est bien ce que tu voulais dire, biensure.

  5. #5
    Membre Expert
    Avatar de olsimare
    Inscrit en
    Décembre 2006
    Messages
    1 185
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 185
    Par défaut
    Bonjour.

    Citation Envoyé par pascal_70 Voir le message
    Si c'est bien ce que tu voulais dire, biensure.
    Non, je parlais d'une void et pas d'une proc stockée !

    Cdt.

  6. #6
    Expert confirmé

    Avatar de Philippe Vialatte
    Homme Profil pro
    Architecte technique
    Inscrit en
    Juillet 2004
    Messages
    3 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2004
    Messages : 3 029
    Par défaut
    Juste en passant, ton code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    if (id_pays.Equals("4"))
    // cas 1 
                else if (id_pays.Equals("5"))
    // cas 2
                else if (id_pays.Equals("1"))
    // cas 3
                else if (id_pays != "5")
    // cas 4
                else
    // cas 5
    je le verrais pas mal mieux comme ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    switch(id_pays)
    case "4":
    // cas 1 
        break;
    case "5":
    // cas 2
        break;
    case "1":
    // cas 3
        break;
    default:
    // cas 4 et 5 (on a deja teste id_pays != "5") 
         break;
    Deuxieme conseil, si tu fais des tests sur 1, 4, et 5, tu vqs te compliquer la maintenance, remplace tes valeurs magiques par une constante qui a du sens pour ton appli

    je vois pas comment créer un seuk blok voir moins.
    voire moins ? 0 blocs de code ?

    Sinon, si la logique de tes commande est identique, tu peux diminuer ton nombre de ligne facilement...

    tu ajoutes une variable :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    List<DbParameter> param = new List<DbParameter>();
    tu reprends ton code, mais tu fais un Add de ton parametre dans params a chaque fois...

    et a la fin de ta fonction, tu fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    insertCommand.Parameters.AddRange(param.ToArray());
    updateCommand.Parameters.AddRange(param.ToArray());

    Mon Blog

    The Cake is still a lie !!!



    Vous voulez contribuer à la rubrique .NET ? Contactez-moi par MP.
    Vous voulez rédiger des articles pour la rubrique .NET ? Voici la procédure à suivre.

  7. #7
    Membre averti
    Inscrit en
    Février 2008
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 26
    Par défaut
    Merci pour vos precieux conseils
    Voila comment j'ais procédé , qu'en penser vous?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
     
            private string Pays_Varchar;
            private string Pays_Commun;
     
            public Parametre_Command(string id_pays, string Dest_Prov, SqlCommand command)
            {
                switch (id_pays)
                {
                    case "4": //  Belgique
                        Pays_Varchar = "Valfis,transport," + Dest_Prov + ",tva";
                        break;
     
                    case "5": //  Luxembourg
                        Pays_Varchar = "Valfis,Provenance,Destination";
                        break;
     
                    case "1": // France
                        Pays_Varchar = "Valfis_fr,Flux_fr,regime_fr,nature_fr,CondLiv,dept,origine,transport," + Dest_Prov + "";
                        break;
     
                    default:
                        // Requete SELECT pour la structure standard (autres pays).
                        Pays_Varchar = "Valfis,Regime,nature,CondLiv,dept,origine,transport," + Dest_Prov + "";
                        break;
                }
     
                // Parametre commun à tous les pays.
                Pays_Commun = ",Flux,Nomenclature,ligne,poids,unité";
     
                Pays_Varchar += Pays_Commun;
     
                string sep = ",";
     
                string[] Pays_ToArray = Pays_Varchar.Split(sep.ToCharArray());
     
                foreach (string val in Pays_ToArray)
                {
                    // Cas particulier où le type est different de Varchar ou les colonnes du DGv et de la BD sont differents .
                    if (val == "nature_fr")
                        command.Parameters.Add("@" + val, SqlDbType.VarChar, 250, "nature");
                    else if(val == "regime_fr")
                        command.Parameters.Add("@" + val, SqlDbType.VarChar, 250, "Regime");
                    else if (val == "Valfis_fr")
                        command.Parameters.Add("@" + val, SqlDbType.Float, 250, "Valfis");
                    else if (val == "Valfis")
                        command.Parameters.Add("@" + val, SqlDbType.Float, 250, "Valfis");
                    else
                        // La colonne du DGV et de la BD identique et de type varchar.
                        command.Parameters.Add("@" + val, SqlDbType.VarChar, 250, val);
                }
            }

  8. #8
    Membre Expert
    Avatar de olsimare
    Inscrit en
    Décembre 2006
    Messages
    1 185
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 185
    Par défaut
    Bonjour.

    C'est déjà bien mieux !

    Citation Envoyé par pvialatte Voir le message
    Deuxieme conseil, si tu fais des tests sur 1, 4, et 5, tu vqs te compliquer la maintenance, remplace tes valeurs magiques par une constante qui a du sens pour ton appli
    Entiérement d'accord, par une enum ou mieux via un paramétrage en base que tu charges au lancement de l'appli et via lequel tu pilotes la construction de la requête... mais là je vais un peu loin pour pas grand chose !

    Cdt.

Discussions similaires

  1. Optimisation de votre SGBDR et de vos requêtes...
    Par SQLpro dans le forum Langage SQL
    Réponses: 35
    Dernier message: 11/01/2013, 12h49
  2. [langage] Optimiser la lecture d'un fichier
    Par And_the_problem_is dans le forum Langage
    Réponses: 4
    Dernier message: 05/02/2003, 09h54
  3. [VB6] [BDD] Optimisation de l'accès aux données
    Par LadyArwen dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 30/01/2003, 14h27
  4. [langage]Problème de temps de lecture, optimisation
    Par And_the_problem_is dans le forum Langage
    Réponses: 2
    Dernier message: 08/01/2003, 09h47
  5. [langage] Optimiser la lecture d'un fichier
    Par And_the_problem_is dans le forum Langage
    Réponses: 2
    Dernier message: 11/06/2002, 11h24

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