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.
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
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); ...
Mon problème vient de la fonction ActiveService dont le code est le suivant:
Code : Sélectionner tout - Visualiser dans une fenêtre à part bgw_OuvertureInc.RunWorkerAsync();
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).
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())"); } } }
Par avance, merci.
Partager