Bonjour,
Cela fait plusieurs jours que je suis sur un problème et cela commence vraiment à me prendre la tête.

J'explique:
Je suis en train de développer une application ayant un lien vers une base de données MySQL, pour effectuer cette lecture, j'utilise un composant BackgroundWorker. Jusque là, pas de soucis, enfin je pense.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
 
private void bgw_OuvertureInc_DoWork(object sender, DoWorkEventArgs e)
        {
            //Activation des services concernés par l'incident levé
            ActiveService(Convert.ToInt32(txt_NumINC.Text));
 
            //Ouverture d'un incident à partir de son ID fournis par la textbox
            Ouverture(txt_NumINC);
...
Pour lancer cette tâche de fond, j'utilise un bouton (action réalisée sur le click) réalisant l'action suivante:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
 bgw_OuvertureInc.RunWorkerAsync();
Mon problème vient de la fonction ActiveService dont le code est le suivant:

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
 
private void ActiveService(int num_inc)
        {
            MySqlDataReader MyReader;
            int i = 0;
            int[,] tableauSER = new int[NBSERVICES, 2];
 
            MyReader = ExecutionRequete.AvecRetour("SELECT s.ser_id, MAX(asz.asz_etat) FROM app_ser_zo asz INNER JOIN services s ON s.ser_id = asz.ser_id GROUP BY s.ser_id");
            while (MyReader.Read())
            {
                //Console.WriteLine("i: " + i.ToString() + "   Tab[" + i.ToString() + ",0]: " + MyReader.GetInt32(0) + "   Tab[" + i.ToString() + ",1]: " + MyReader.GetInt32(1));
                tableauSER[i, 0] = MyReader.GetInt32(0);
                tableauSER[i, 1] = MyReader.GetInt32(1); //Erreur à cet endroit au niveau du MyReader.GetInt32(1) 
                i++;
            }
            MyReader.Close();
 
            int[] tableau = new int[NBSERVICES];
            MyReader = ExecutionRequete.AvecRetour("CALL SelectServiceInc("+num_inc+")");
            i = 0;
            while (MyReader.Read()) tableau[i++] = MyReader.GetInt32(0); //Ser_id
            MyReader.Close();
            for (int j = 0; j <= (tableau.GetUpperBound(0)); j++)
            {
                for (i = 0; i <= tableauSER.GetUpperBound(0); i++)
                {
                    if (tableauSER[i, 1] == 0 && tableauSER[i, 0] == tableau[j]) ExecutionRequete.SansRetour("INSERT INTO evenementservice (SER_ID, ES_DATEACTIF) VALUES (" + tableauSER[i, 0] + ", CURRENT_TIMESTAMP())");
                }
            }
        }
Lorsque je clique plusieurs fois rapidement pour faire un test de surcharge, l'application plante au niveau de la ligne tableauSER[i, 0] = MyReader.GetInt32(1); avec l'erreur suivante: You have specified an invalid column ordinal. Je ne comprend vraiment pas d'où vient l'erreur puisque lorsque j'effectue un fonctionnement normal cela fonctionne 9 fois sur 10 (la dixième étant l'erreur en fonctionnement normal).

Par avance, merci.