Bonjour

J'ai actuellement un code fonctionnel qui appelle une procédure stockée écrite dans une class.
Mais quand je lis le code, j'ai une impression d'usine à gaz, de bouilli, bref quelque chose de mal optimisé.

J'aurai besoin d'une aide pour mieux réécrire mon code d'appel à la procédure stockée.

Pour commencer voici la méthode appelante
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
 
//FLAgents = class form principale
// DBG_LAgents = datagridview
//DBS_LAgents = BindingSource
 
        //variables public dans ma class form
        public string APresents, APartis, AMatricule, ANom, ACarriere, ATypeCar = "", A_NomJeuneFille, AOrderBy = "", ACarSimple = "";
 
        private void FLAgents_Load(object sender, EventArgs e)
        {
            Cursor.Current = Cursors.WaitCursor;
 
            DBG_LAgents.DataSource = DBS_LAgents;
            Fill_DBG_LAgents(SQL_Liste());
 
            Cursor.Current = Cursors.Default;
        }
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
private void Fill_DBG_LAgents(string macommande)
        {
 
            GO_Init.Init_connexion(); //connexion à la base de doonées
 
            try
            {
 
                OdbcCommand dataSQL = new OdbcCommand(macommande, GO_Init.conn);
 
                OdbcDataReader read = dataSQL.ExecuteReader();
 
                DataSet ds = new DataSet();
                DataTable dt = new DataTable("Table1");
 
                ds.Tables.Add(dt); //ajout du datatable dans le dataset
 
                // je vide tout avant de remplir au cas où
                dt.Clear();
                ds.Tables[0].Clear();
                DBG_LAgents.DataSource = null;
 
                DBG_LAgents.AutoGenerateColumns = false;
                DBG_LAgents.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.None;
 
 
                ds.Load(read, LoadOption.PreserveChanges, ds.Tables[0]); //chargement du dataset - ligne de code récupéré sur le net
 
                Cursor.Current = Cursors.WaitCursor;
 
                DBG_LAgents.SuspendLayout();
 
                //Charge_BarreChargement(ds);
 
                DBG_LAgents.DataSource = ds.Tables[0]; //remplissage de mon datagridview
                DBG_LAgents.ResumeLayout();
 
                DBG_LAgents.AutoResizeColumns(DataGridViewAutoSizeColumnsMode.AllCells);
                this.localite.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill;
 
                Cursor.Current = Cursors.Default;
 
                BE_Text1.Text = DBG_LAgents.RowCount.ToString() + " agent(s) affiché(s).";
 
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
            finally
            {
                GO_Init.conn.Close(); //fermeture de la connexion
            }
 
        }
macommande est chargée par cette méthode :
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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
        public string SQL_Liste()
        {
 
 
            //Paramètres Présents ou non et Partis ou non ('1' ou '0') et ('1' ou '0')
            APresents = IN_Presents.Checked == true ? "1" : "0";
            APartis = IN_Partis.Checked == true ? "1" : "0";
 
            //Paramétres de Matricule ('0' ou 'Matricule') et Début de Nom ('0' ou "'Début de Nom'")
            if (MatNom == "")
            {
                //Pas de restriction sur matricule ou début de nom
                AMatricule = "0";
                ANom = "0";
            }
            else
            {   
                int resultParse = 0;
 
                if (int.TryParse(MatNom.Trim(), out resultParse))
                {
                    if ((MatNom.Trim().Substring(MatNom.Length - 1) != "0") && (MatNom.Trim().Length < 8))
                        MatNom = MatNom.Trim() + "0";
                    //'Restriction sur matricule
                    AMatricule = MatNom.Trim().PadLeft(8, '0');
                    ANom = "0";
                }
                else
                {
                    AMatricule = "0";
                    ANom = MatNom.Trim();
                }
            }
 
            //Paramètre : seulement les agents sans carrière ou non ('1' ou '0')
            ACarriere = IN_Carriere.Checked == true ? "1" : "0";
 
            //Paramètre type de carrière ('0', '1', '2', '3', '12', '13', '23', ou '9')
            if (IN_DoubleCarriere.Checked == true)
                ATypeCar = "D";
            else
            {
                if (B_SPPcheck && B_SPVcheck && B_ATScheck)
                    //tous
                    ATypeCar = "9";
                else
                {
                    if (!B_SPPcheck && !B_SPVcheck && !B_ATScheck)
                        //aucun
                        ATypeCar = "0";
                    else
                    {
                        if (B_SPPcheck && !B_SPVcheck && !B_ATScheck)
                            //SPP
                            ATypeCar = "1";
                        else
                        {
                            if (!B_SPPcheck && B_SPVcheck && !B_ATScheck)
                                //SPV
                                ATypeCar = "2";
                            else
                            {
                                if (!B_SPPcheck && !B_SPVcheck && B_ATScheck)
                                    //ATS
                                    ATypeCar = "3";
                                else
                                {
                                    if (B_SPPcheck && B_SPVcheck && !B_ATScheck)
                                        //SPP & SPV
                                        ATypeCar = "12";
                                    else
                                    {
                                        if (B_SPPcheck && !B_SPVcheck && B_ATScheck)
                                            //SPP & ATS
                                            ATypeCar = "13";
                                        else
                                        {
                                            if (!B_SPPcheck && B_SPVcheck && B_ATScheck)
                                                //SPV & ATS
                                                ATypeCar = "23";
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
 
            }
 
            //Paramètres de l'order by ( Exemple : "'order by ag.nom ASC ou DESC '" )
            int E_No_Col = 0;
            switch (E_No_Col)
            {
                case 0:
                    AOrderBy = "'' Order by ag.matricule ASC ''";
                    break;
                case 1:
                    AOrderBy = "";
                    break;
                case 2:
                    AOrderBy = "";
                    break;
                case 3:
                    AOrderBy = "";
                    break;
                case 4:
                    AOrderBy = "";
                    break;
            }
 
            //Paramètre @CarSimple (carrière simple, O/N)
            if (IN_Carriere.Checked == true)
                ACarSimple = "N";
            else
            {
                if (IN_CarriereSimple.Checked == true)
                    ACarSimple = "O";
                else
                    ACarSimple = "N";
            }
 
            //recherche sur le nom de jeune fille
            if (IN_NomJeuneFille.Checked == true)
                A_NomJeuneFille = "O";
            else
            {
                A_NomJeuneFille = "N";
            }
 
            // C'est cette partie qui m'intéresse
            SQL_PR_AGENTS_PREP_SELECTION pr_ag_prep_sel = new SQL_PR_AGENTS_PREP_SELECTION(
                0, "MABASEDEDONNEES", "APPLI", "MOI", "0",
                APresents, APartis, AMatricule, ANom, ACarriere, ATypeCar, AOrderBy, GO_Init.GA_Structure,
                "", "", ACarSimple, A_NomJeuneFille);
 
            return pr_ag_prep_sel.req_sql; // car la méthode doit retourner un string pour la variable macommande
 
        } // fin SQL_Liste
et enfin ma class externe à ma forme appelant la procédure stockée
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
using System;
 
namespace MONAPPLI.Classes
{
        public class SQL_PR_AGENTS_PREP_SELECTION 
        {
            public string req_sql;
 
            public SQL_PR_AGENTS_PREP_SELECTION(int B_Edit, string A_BaseSOC, string A_Module
                                     , string A_User, string Actif, string Presents
                                     , string Partisg, string Matricule, string Nom
                                     , string Car, string TypeCar, string OrderBy, string restrict_centre
                                     , string GMFI_HABI, string Date_Ref, string CarSimple
                                     , string NomJeuneFille)
            {
                req_sql = "EXEC PR_AGENTS_PREP_SELECTION ";
                req_sql = req_sql + (B_Edit == 0 ? "0" : "1") ;
                req_sql = req_sql + ",'" + A_BaseSOC.Trim() + "' ";
                req_sql = req_sql + ",'" + A_Module.Trim() + "' ";
                req_sql = req_sql + ",'" + A_User.Trim() + "' ";
                req_sql = req_sql + ",'" + Actif.Trim() + "' ";
                req_sql = req_sql + ",'" + Presents.Trim() + "' ";
                req_sql = req_sql + ",'" + Partisg.Trim() + "' ";
                req_sql = req_sql + ",'" + Matricule.Trim() + "' ";
                req_sql = req_sql + ",'" + Nom.Trim() + "' ";
                req_sql = req_sql + ",'" + Car.Trim() + "' ";
                req_sql = req_sql + ",'" + TypeCar.Trim() + "' ";
                req_sql = req_sql + ",'" + OrderBy.Trim() + "' ";
                req_sql = req_sql + ",'" + restrict_centre.Trim() + "' ";
                req_sql = req_sql + ",'" + GMFI_HABI.Trim() + "' ";
                req_sql = req_sql + ",'" + Date_Ref.Trim() + "' ";
                req_sql = req_sql + ",'" + CarSimple.Trim() + "' ";
                req_sql = req_sql + ",'" + NomJeuneFille.Trim() + "' ";
 
            }
 
 
        }
 
}
Le code étant fonctionnel, est ce pour vous une usine à gaz également ? si oui, comment le changer ?