MySqlDataReader - Fatal error encountered during data read.

Résolu
nagaD.scar Messages postés 4272 Date d'inscription samedi 8 septembre 2007 Statut Membre Dernière intervention 4 janvier 2023 - 11 déc. 2013 à 13:18
nagaD.scar Messages postés 4272 Date d'inscription samedi 8 septembre 2007 Statut Membre Dernière intervention 4 janvier 2023 - 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 33
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