MySqlDataReader - Fatal error encountered during data read.

Résolu
nagaD.scar
Messages postés
4269
Date d'inscription
samedi 8 septembre 2007
Statut
Membre
Dernière intervention
4 mars 2021
- 11 déc. 2013 à 13:18
nagaD.scar
Messages postés
4269
Date d'inscription
samedi 8 septembre 2007
Statut
Membre
Dernière intervention
4 mars 2021
- 26 déc. 2013 à 17:01
Bonjour à tous.


je me tourne vers vous car j'ai un soucis avec mon reader qui déclenche l'exeption
Fatal error encountered during data read.
sans (à prioris) raison valable ...

Dans un premier temps, ce qui concerne la connexion fonctionne, ainsi que le query. Par contre, durant la lecture (donc pas dès que je lis mais au bout d'un moment), l'exception apparaît.

voici la fonction qui effectue la requête :
 
	public int Query(string sQuery)
		{
			Erreur = "";
			if (!(reader == null) && !reader.IsClosed ) reader.Close();
			bIsOk = false;
			MySqlCommand cmdMySQL = pMySQL.CreateCommand();
			cmdMySQL.CommandText = sQuery;

			try
			{
				reader = cmdMySQL.ExecuteReader();
			}
			catch (MySqlException e)
			{
				cmdMySQL.Dispose();
				Erreur = e.Message.ToString();
				return 2;
			}
			catch (Exception)
			{
				cmdMySQL.Dispose();
				checkAndReconnect();
				return Query(sQuery);
			}
			finally
			{
			}
			bIsOk = reader.HasRows;

			if (bIsOk) return 1;
			else return 0;
		}


et celle qui me permet de lire les résultats :
		public IEnumerable<string> getRes()
		{

			if (!bIsOk)
			{
				#region gestion
				if (Erreur != "")
				{
					Exception e = new Exception(Erreur);
					throw e;
				}
				else
				{
					Exception e = new Exception("PAS DE REQUETE");
					throw e;
				}
				#endregion
			}

			string res = "";
			int nbChamps = reader.FieldCount - 1;
			while (reader.Read())
			{
				res = "";
				for (int i = 0; i <= nbChamps; i++)
					res += reader.GetValue(i) + ";";
				yield return res;
			}
			reader.Dispose();
			reader.Close();
			bIsOk = false;
			Erreur = "";			
		}


l'exception apparait au niveau du while :
while (reader.Read())
mais, je me répète, pas lors de la première itération.

Deux points à rajouter :
- j'utilise ces méthodes dans d'autres parties sans soucis
- ma requête récupère deux éléments : une chaine de 10 caractère et un identifiant

si quelqu'un à une idée ... ou si d'autre infos vous seraient nécessaires, demandez =)

merci d'avance.

naga

5 réponses

cs_Robert33
Messages postés
834
Date d'inscription
samedi 15 novembre 2008
Statut
Membre
Dernière intervention
14 janvier 2017
32
20 déc. 2013 à 18:09
Bonsoir
Lorsque tu dis "Pas lors de la première itération" veux-tu dire que ça plante pendant la première boucle While{} ou lors d'un second appel ?
Dans le deuxième cas cela serait normal si entre temps tu n'as pas rappelé un ExecuteReader() pour remplir de nouveau le DataReader.
Si non quelle est le message exact de l'exception ?
0