Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1383 connectés 

  FORUM HardWare.fr
  Programmation
  C#/.NET managed

  [Résolu][C# .net] SqlDataReader ne contenant rien => exception

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Résolu][C# .net] SqlDataReader ne contenant rien => exception

n°1407560
Roodie
Posté le 16-07-2006 à 15:10:20  profilanswer
 

Bonjour à tous :)
 
Je fais une requête toute simple qui ne retourne aucune ligne.  

Code :
  1. string command = "select * from member";
  2. using (SqlDataReader reader = DbManager.SelectAndReturn(command))
  3. {
  4.   if (reader.HasRows)
  5.   {
  6.     reader.Read();
  7.   }
  8. }


Le problème, c'est que reader.HasRows retourne une InvalidOperationException, comme si ça tentait de lire le premier enregistrement.  
Faut-il utiliser qqch d'autre que reader.HasRows ??
Merci de votre aide :)

Message cité 1 fois
Message édité par Roodie le 16-07-2006 à 17:01:41
mood
Publicité
Posté le 16-07-2006 à 15:10:20  profilanswer
 

n°1407563
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 16-07-2006 à 15:21:49  profilanswer
 

Roodie a écrit :

Code :
  1. DbManager.SelectAndReturn(command))




c'est quoi ça ?


Message édité par Harkonnen le 16-07-2006 à 15:22:03

---------------
J'ai un string dans l'array (Paris Hilton)
n°1407572
Roodie
Posté le 16-07-2006 à 15:33:54  profilanswer
 

Oops, "SelectAndReturn" est une fonction à moi tout seul :)
 
Voici le nouveau bout de code, simplifié :  

Code :
  1. string command = "select * from member";
  2. using (SqlConnection connection = new SqlConnection(...))
  3. {
  4.   connection.Open();
  5.   SqlCommand cmd = new SqlCommand(command, connection);
  6.   SqlDataReader reader = cmd.ExecuteReader();
  7.   connection.Close();
  8.   if (reader.HasRows)
  9.   {
  10.     reader.Read();
  11.   }
  12. }


Mici bien pour votre aide :)

n°1407577
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 16-07-2006 à 15:42:30  profilanswer
 

enleve le connection.close() de la ligne 7, il est strictement inutile vu que tu englobes ton objet SqlConnection dans une clause using{}


---------------
J'ai un string dans l'array (Paris Hilton)
n°1407583
Roodie
Posté le 16-07-2006 à 15:51:39  profilanswer
 

Exact !
ça marche !
Apparemment le reader dépend de la connection...
Mici bien à toi :)

n°1407586
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 16-07-2006 à 15:55:08  profilanswer
 

[:ojap]


---------------
J'ai un string dans l'array (Paris Hilton)
n°1407593
Roodie
Posté le 16-07-2006 à 16:00:57  profilanswer
 

Attends, c'est pas fini :)
En fait, ma méthode SelectAndReturn ferme la connection puis retourne le SqlDataReader.  
Mets après ça, on a vu que le SqlDataReader est mort.  
 
Ya-t-il un moyen de pouvoir lui faire retourner un SqlDataReader valable, même si la connection fermée ?  
Duplication du SqlDataReader ??
Mici si tu as une petite idée :)

Message cité 1 fois
Message édité par Roodie le 16-07-2006 à 16:01:27
n°1407599
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 16-07-2006 à 16:11:26  profilanswer
 

Roodie a écrit :


Ya-t-il un moyen de pouvoir lui faire retourner un SqlDataReader valable, même si la connection fermée ?  


non, car sans connection, le reader ne peut rien faire. je cite la MSDN :

Citation :


Lorsque SqlDataReader est en cours d'utilisation, le SqlConnection qui lui est associé est occupé à servir SqlDataReader et aucune autre opération ne peut être effectuée sur SqlConnection, à l'exception de sa fermeture. Cette situation subsiste jusqu'à ce que la méthode Close de SqlDataReader soit appelée. Par exemple, vous ne pouvez pas récupérer de paramètres de sortie tant que vous n'avez pas appelé Close.


http://msdn2.microsoft.com/fr-fr/l [...] eader.aspx
 
ceci dit, en quoi ça te gène ? si c'est pour libérer la connexion le plus vite possible, alors tu stockes les données du reader dans une collection quelconque pour utilisation ultérieure et ensuite tu peux fermer la connexion :spamafote:


Message édité par Harkonnen le 16-07-2006 à 16:12:13

---------------
J'ai un string dans l'array (Paris Hilton)
n°1407601
Roodie
Posté le 16-07-2006 à 16:23:02  profilanswer
 

Ma méthode est propre et consistante avec toutes les autres méthodes que j'ai faite, alors je voulais la garder.  
Sinon, tu parles de garder les données du reader qqpart. Veux-tu dire qu'il faut par exemple lire le reader, stocker ses données dans un dictionnaire, et retourner le dictionnaire ? Si c'est ça, c'est pas pratique effectivement :)
Merci bcp de ton aide!!!

n°1407608
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 16-07-2006 à 16:45:25  profilanswer
 

Roodie a écrit :

 
Sinon, tu parles de garder les données du reader qqpart. Veux-tu dire qu'il faut par exemple lire le reader, stocker ses données dans un dictionnaire, et retourner le dictionnaire ? Si c'est ça, c'est pas pratique effectivement :)


ben le mieux, c'est pas la solution que je t'ai donnée (qui est une solution batarde), mais c'est d'utiliser un DataSet, qui justement est fait pour ça. le DataSet est (pour simplifier) une base de données en mémoire. tu dois mapper via un SqlAdapter ta base dans le Dataset, puis ensuite tu peux fermer ta connexion et faire ce que tu veux de ton Dataset
http://msdn2.microsoft.com/en-us/l [...] taset.aspx


---------------
J'ai un string dans l'array (Paris Hilton)
mood
Publicité
Posté le 16-07-2006 à 16:45:25  profilanswer
 

n°1407612
Roodie
Posté le 16-07-2006 à 17:01:13  profilanswer
 

Ah ouais ! Très intéressant.  
Je vais quand même garder la solution du SqlDataReader pour mon problème.  
Et pis si un jour j'ai vraiment besoin de garder en mémoire mon SqlDataReader, j'utiliserai un DataSet !  
Merci bcp pr ton aide !
Bonne fin de week-end à toi :)

n°1407613
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 16-07-2006 à 17:06:18  profilanswer
 

idem [:ohello]


---------------
J'ai un string dans l'array (Paris Hilton)
n°1407932
Arjuna
Aircraft Ident.: F-MBSD
Posté le 17-07-2006 à 11:28:53  profilanswer
 
n°1407945
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 17-07-2006 à 11:37:05  profilanswer
 


toi aussi t'as fermé la connexion avant d'utiliser le reader ? :whistle:


---------------
J'ai un string dans l'array (Paris Hilton)
n°1407951
Arjuna
Aircraft Ident.: F-MBSD
Posté le 17-07-2006 à 11:40:30  profilanswer
 

Harkonnen a écrit :

toi aussi t'as fermé la connexion avant d'utiliser le reader ? :whistle:


:o
 
(nan, moi j'ai oublié d'allumer mon serveur ce matin en allant au boulot, et du coup je m'ennuie comme un rat mort :/)


Message édité par Arjuna le 17-07-2006 à 11:41:07

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C#/.NET managed

  [Résolu][C# .net] SqlDataReader ne contenant rien => exception

 

Sujets relatifs
[VBA] RESOLU Extraction d'une chaine de caractères[Resolu] [C] GPIB transfert et acquisition
[Résolu TOUT SEUL] [GTK+] Installation sous CodeBlocks[Résolu] Parcourir les éléments de mon formulaire
[Résolu][SQL] Problème classement ASC/DESC sur VARCHAR[Résolu] Problème de droit en lecture! [move_uploaded_file()]
[C#] [RESOLU] FillSchema et Parameters incompatible ?latin_general_ci et pourtant des caractere utf8 apparaissent! [résolu]
Exception in thread "main".java.lang.StringIndexOutOfBoundsException[rèsolu]probleme machine virtuelle
Plus de sujets relatifs à : [Résolu][C# .net] SqlDataReader ne contenant rien => exception


Copyright © 1997-2018 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR