Attention c'est CHAUD

Dans une form j'ai declaré un dataset et un dataadapter afin de les utiliser dans deux fonction de query distincte et dans une fonction d'update

Mais voila j'ai un comportement bizare !!

1 Situation normale
Dans le cas ci apres ma fonction de select utilise un dataset local et l'adapter commun : tout va bien mais ce dataset ne pourra pas etre utilisé dans l'update donc ca ne me sert pas

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
    select2(string selectcmd)
    {
      MySqlDataAdapter adapter = new MySqlDataAdapter();
      adapter.SelectCommand = new MySqlCommand(selectcmd, conn);
      DataSet dsAddr1 = new DataSet();
      adapter.Fill(dsAddr1);
      dgv_addr.DataSource = dsAddr1.Tables[0];
      txb_count.Text = dsAddr1.Tables[0].Rows.Count.ToString();
    }
2 Situation INCOMPREHENSIBLE

Dans le cas ci apres ma fonction de select utilise le dataset commun et l'adapter commun :
Je fais un clear du dataset qui a déja eté utilisé et a servi de datasource a dgv_addr dans un autre select
Au moment du fill un event row_enter the dgv_addr est genéré il appelle ShowAddrProp qui balance un mesage d'erreur lors du fill

Chapeau a celui qui peut m'expliquer


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
    select2(string selectcmd)
    {
      MySqlDataAdapter adapter = new MySqlDataAdapter();
      adapter.SelectCommand = new MySqlCommand(selectcmd, conn);
      dsAddr.Clear();
      adapter.Fill(dsAddr);  // -> event row_enter de dgv_addr et crash dans appel fonction ci apres
      dgv_addr.DataSource = dsAddr.Tables[0];
      txb_count.Text = dsAddr.Tables[0].Rows.Count.ToString();
 
    }
 
    // *******************************************************************************
   void ShowAddrProp(int addrID)
    {
      string selectcmd;
      int j;
      int di;
 
      MySqlDataAdapter adapter1 = new MySqlDataAdapter();
      selectcmd = "SELECT * FROM `containers` where addrID=" + addrID.ToString();
      adapter1.SelectCommand = new MySqlCommand(selectcmd, conn);
 
      // On définit en lieu de stockage et on le rempli avec le résultat de la requête
      DataSet ds1 = new DataSet();
      adapter1.Fill(ds1);  // crash {"There is already an open DataReader associated with this Connection which must be closed first."}
 
      dgv_cont.DataSource = ds1.Tables[0];
    }
{"There is already an open DataReader associated with this Connection which must be closed first."}