Bonjour à tous,
J'ai script qui est chargé de supprimer des enregistrements dans une DB selon certains critères.
J'effectue en premier une requête de sélection des enregistrements puis, je vérifie si les enregistrements sont uniques et enfin j'effectue une requete de suppression des enregistrements (différente si l'enregistrement est unique ou non). Le tout est encapsulé dans une transaction SQLServer.
Le problème est que VS m'indique que je peux pas effectuer la seconde requete de sélection car le SQLReader de la première n'est pas fermé ....

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
commandexe.CommandText = "Select EUOBTRNS_FLOW_ID,EUOBTRNS_NBR from TransactionInQuery where QueryNumber=@QueryNB";
SqlDataReader readerTrans = (SqlDataReader)commandexe.ExecuteReader();

SqlDataReader reader;
while (readerTrans.Read())
{
   //Create Dbcommand dedicate to the while loop
   DbCommand cmdReader = this.CreateCommandTrans();
   DbCommand cmdDelete = this.CreateCommandTrans();
   cmdReader.Transaction = this.TransSQL;
   cmdDelete.Transaction = this.TransSQL;

   this.AddNewParameter(cmdReader, "TransID", readerTrans["EUOBTRNS_FLOW_ID"]);
   this.AddNewParameter(cmdReader, "TransNumber", readerTrans["EUOBTRNS_NBR"]);
   this.AddNewParameter(cmdDelete, "TransID", readerTrans["EUOBTRNS_FLOW_ID"]);
   this.AddNewParameter(cmdDelete, "TransNumber", readerTrans["EUOBTRNS_NBR"]);

   //Check if the transaction is used by another query
   cmdReader.CommandText = "Select count(*) AS TransCompte from TransactionInQuery where QueryNumber=@QueryNB and EUOBTRNS_FLOW_ID=@TransID and EUOBTRNS_NBR=@TransNumber";
   reader = (SqlDataReader)cmdReader.ExecuteReader();
   if (reader.Read())
   {
      int Transcount = reader.GetInt16(0);
      if (Transcount > 1)
      {
          //The transaction is used by another query and then delete only the reference in TransactionInQuery
         cmdDelete.CommandText = "Delete From TransactionInQuery where EUOBTRNS_FLOW_ID=@TransID and EUOBTRNS_NBR=@TransNumber and QueryNumber=@QueryNumber;";
         cmdDelete.ExecuteNonQuery();
       }
       else
       {
           //else delete all the references of the transaction
             cmdDelete.CommandText = "Delete From EUOB04TTRANSSTEPLO where EUOBTRNS_FLOW_ID=@TransID and EUOBTRNS_NBR=@TransNumber;";
             cmdDelete.ExecuteNonQuery();
             cmdDelete.CommandText = "Delete From TransactionInQuery where EUOBTRNS_FLOW_ID=@TransID and EUOBTRNS_NBR=@TransNumber and QueryNumber=@QueryNumber;";
             cmdDelete.ExecuteNonQuery();
             cmdDelete.CommandText = "Delete From EUOB03TTRANS where EUOBTRNS_FLOW_ID=@TransID and EUOBTRNS_NBR=@TransNumber;";
             cmdDelete.ExecuteNonQuery();
        }
}
Le message d'erreur apparait au niveau de la ligne en bleu

Merci par avance pour votre aide.
Si vous avez besoin d'infos supplémentaire, je suis à votre disposition.