Retour au début du code SI erreur

Signaler
-
Messages postés
16337
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
15 octobre 2021
-
Bonjour,
j'ai un bloc d'instructions avec un TRY CATCH , et une exception WebException .
je cherche comment faire pour que si l'opération échoue , on fait un retour au début du code pour refaire l'opération à nouveau(tout cela dans le code c#) c'est COMME UN ROLLBACK dans SQLSERVER.
excusez ma façon de décrire ^^".
MERCI

15 réponses

aucune réponse!!! :'(
Messages postés
15151
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
14 octobre 2021
99
Hello,
aucune réponse!!! :'(

-> Tu es bien impatient... ;)

Pourquoi ne pas mettre une boucle while?
comment le faire avec une instruction dans un TRY CATCH!!
 try
			{
				ServiceReferenceEnvoiCommande.Service1 service = new ServiceReferenceEnvoiCommande.Service1();
			
				
				//service.Open();
           
				ServiceReferenceEnvoiCommande.Commande commandeAenvoyer = new ServiceReferenceEnvoiCommande.Commande();
				
				transmettreProgressBar.Value=40;
				
				
				ServiceReferenceEnvoiCommande.Commande commandeReponse = new ServiceReferenceEnvoiCommande.Commande();
				//Recuperer la date de la commande 
				commandeAenvoyer.DateCommande = DateTime.Now;
				
				commandeAenvoyer.nbr_Lignes_Commande =int.Parse(dr[0]["nbr_lignes_entete_commande"].ToString());
				commandeAenvoyer.nbr_Produits_Commande = iNbreProduit;
				commandeAenvoyer.codeCommande = dr[0]["id_commande"].ToString();
				
				//recuperer le pharmacien 
				commandeAenvoyer.pharmacien = new ServiceReferenceEnvoiCommande.Pharmacien();
				commandeAenvoyer.pharmacien.CodePharmacien = sCodePharmacie;
				commandeAenvoyer.pharmacien.NomPharmacien = sNomPharmacie;
						
				

				commandeAenvoyer.MedCommandee = new ServiceReferenceEnvoiCommande.Medicament[dr.Length];
				transmettreProgressBar.Value=55;
				for (int i=0;i<dr.Length;i++)
				{
			
					string codeBare = dr[i]["code_bare"].ToString();
					if (codeBare == String.Empty  || codeBare == null)
						codeBare = "00000";
					long quantitn = Convert.ToInt64(dr[i]["qte_detail_commande"].ToString());
					int Quantite = (int)quantitn;
					if(Quantite>0) // quand la quantité commandée=0, on ne l'envoie pas
					{

						commandeAenvoyer.MedCommandee[i] = new ServiceReferenceEnvoiCommande.Medicament();
						commandeAenvoyer.MedCommandee[i].ID = dr[i]["ID_ARTICLE"].ToString();;					
						commandeAenvoyer.MedCommandee[i].CodeBarre = codeBare;					
						commandeAenvoyer.MedCommandee[i].Designation =dr[i]["designation_article"].ToString();
						commandeAenvoyer.MedCommandee[i].Quantite = Quantite;
						commandeAenvoyer.MedCommandee[i].PrixVente = float.Parse(dr[i]["prix_vente_detail_commande"].ToString());
					}
				}

				reponseCommande = service.EnvoyerCommande(commandeAenvoyer);//numero de commande
				
				transmettreProgressBar.Value=80;
				if (int.Parse(reponseCommande) != 0) 
				{
					Labelreponse.Text = "Votre commande a été enregistrée sous le N° " + reponseCommande;
					string numeroApprovisionnement=string.Empty;
					if(DScom!=null)
					{
						if(DScom.Tables[0].Rows.Count>0)
						{
							if(DScom.Tables[0].Rows.Count==1)
							{
								if(DScom.Tables[0].Rows[0]["id_commande"]!=null)
								{
									numeroApprovisionnement=DScom.Tables[0].Rows[0]["id_commande"].ToString();
								}
							}
						
Messages postés
15151
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
14 octobre 2021
99
Je verrais un truc comme ça:
bool error = false;
do {
  try
  {
    error = taFonction();
    // ou bien tout ton code
  }
  catch(Exception e)
  {
    // gestion erreur
    error = true;
  }
} while (error);


@+
Buno, Modo CS-CCM
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
à quoi sert taFonction(); dans TRY
est ce que c'est obligatoire?
Messages postés
15151
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
14 octobre 2021
99
j'ai mis taFonction() pour ne pas réécrire tout ton code ;)
Après, tu fais ce que tu veux.
aah d'accord merci je vais tester :)
quand j'exécute, le message d'erreur que j' ai écris dans le CATCH s'affiche et quand je clique Fermer , la boite de dialogue reste coincée et ne se ferme plus jusqu'à ce que j'arrête l'application.
si j 'ai bien compris le programme rencontre l'erreur à chaque fois ,et avec la boucle le message ne s'arrête plus de s'afficher , plutôt il ne se ferme pas comme j 'ai dit ...
Messages postés
15151
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
14 octobre 2021
99
Ah bah je ne savais pas que tu affichais une popup...
A toi d'arranger le code en fonction du résultat de la popup...
non c'est qu'un messageBox.show ^^"
je travaille avec WinForm C#
il est dans le catch :
catch(WebException Wex)
				{
					//				//prevoir la suppression des produits insérés
					//     			MessageBox.Show(Wex.Message);
					MessageBox.Show("Une erreur s'est produite lors de la transmission. Merci de réessayer.");
					StreamWriter txt1 = File.AppendText("c:\\Log\\Journal_Erreur.txt");
					txt1.WriteLine("\nError  :"+DateTime.Now.ToString()+"      :"+Wex.Message);
					txt1.Flush();
					txt1.Close();
					BtnTransmission.Enabled = true;
					transmettreProgressBar.Visible=false;
					error= true;
				}
Messages postés
16337
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
15 octobre 2021
566
Bonsoir,

comme Buno te la déjà dit ton impatience n'incite pas à te répondre.

Si l'erreur se reproduit indéfiniment, c'est que ton code bugue.

Execute le en pas à pas pour voir à quelle ligne ça se produit.

A ce moment vérifie tous les paramètres.

Et reviens si tu ne trouves pas la solution.
et bin premièrement rien à voir avec ma patience parce que c'est un travail que j dois rendre au plus vite ^^
et deuxièmement l'Exception se produise lorsqu'il n y a pas de connexion entre le WebService et l'application qu'utilise le client , et dans ce cas là le programme retourne au début de l'opération ...
Messages postés
16337
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
15 octobre 2021
566
premièrement rien à voir avec ma patience parce que c'est un travail que j dois rendre au plus vite

Oui mais l'urgence n'est que pour toi, et faire deux "up" par jour ne poussera pas plus les bénévoles que nous sommes à te répondre.

Qu'il n'y ait pas de connexion, c'est l'erreur qui devrait arriver de temps en temps, le programme retourne au début pour retester OK. Il faudrait peut être, mettre un petit délai.

Mais si ça tourne en boucle, il doit y avoir autre chose qu'un soucis de réseau.