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

  FORUM HardWare.fr
  Programmation
  C#/.NET managed

  [c#]Verifier qu'un enregistrement est present dans la BDD

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[c#]Verifier qu'un enregistrement est present dans la BDD

n°1135539
herks
Posté le 30-06-2005 à 10:50:07  profilanswer
 

Salut,
 
j'ai créé un bout de code qui me permet de verifier si un element est present ou pas dans ma base.
Ca ne me semble pas vraiment optimisé. Voici le code
 

Code :
  1. SqlCommand myCommand;
  2.         SqlDataReader myReader;
  3.         SqlConnection myConnection = (SqlConnection)Session["myConnection"];
  4.         string req_select = "SELECT * FROM matable WHERE id = @id";
  5.         myCommand = new SqlCommand(req_select, myConnection);
  6.         //creation et declaration des parametres
  7.         myCommand.Parameters.Add(new SqlParameter("@id", SqlDbType.Char, 100));
  8.         //Attribution des valeurs aux parametres
  9.         myCommand.Parameters["@id"].Value = "2";
  10.         myReader = myCommand.ExecuteReader();
  11.         int i = 0;
  12.         while (myReader.Read())
  13.         {
  14.             i++;
  15.         }
  16.         myReader.Close();
  17.         if (i >= 1)
  18.             Response.Write("Element present dans la base" );
  19.         else
  20.             Response.Write("Element pas present dans la base" );


 
Je suis preneur de tous conseil pour ameliorer et optimiser mon code.
Merci


Message édité par herks le 30-06-2005 à 11:06:32
mood
Publicité
Posté le 30-06-2005 à 10:50:07  profilanswer
 

n°1135545
cesarr89
Posté le 30-06-2005 à 10:52:50  profilanswer
 

myReader vaut pas null normalement quand ca retourne rien?


---------------
!== Force et honneur ==!
n°1135557
herks
Posté le 30-06-2005 à 11:03:33  profilanswer
 

apparament ca retourne flase ou true
voici la nouvelle version du code:
 

Code :
  1. SqlCommand myCommand;
  2.         SqlDataReader myReader;
  3.         SqlConnection myConnection = (SqlConnection)Session["myConnection"];
  4.         string req_select = "SELECT * FROM matable WHERE id = @id";
  5.         myCommand = new SqlCommand(req_select, myConnection);
  6.         myCommand.Parameters.Add(new SqlParameter("@id", SqlDbType.Char, 100));
  7.         myCommand.Parameters["@id"].Value = "2";
  8.         myReader = myCommand.ExecuteReader();
  9.      
  10.         if (myReader.Read() == true)
  11.             Response.Write("Element present dans la base" );
  12.         else
  13.             Response.Write("Element pas present dans la base" );


 
si y'a d'autre soluce plus propre ou mieux optimisé je suis toujours preneur ;)

n°1135562
cesarr89
Posté le 30-06-2005 à 11:04:33  profilanswer
 

Ca m'a l'air correct....faudrait un 'expert' pour t'en dire plus..genre FlorentG.


---------------
!== Force et honneur ==!
n°1135567
zetranber
Posté le 30-06-2005 à 11:07:32  profilanswer
 

Et pourquoi pas faire :  
 
if ( reader.HasRows )
 
C'est plus simple quand même :)
Et ca t'evite une méthode de lecture qui sert a rien ^^


Message édité par zetranber le 30-06-2005 à 11:08:20
n°1135575
FlorentG
Posté le 30-06-2005 à 11:11:55  profilanswer
 

Ca à l'air potable, en effet. J'enlèverais juste la string req_select qui sert à rien, autant la foutre directe dans le constructeur. Aussi vu qu'on ne retourne qu'un truc, autant utiliser ExecuteScalar(), qui renvoi en même temps la première colonne du premier enregistrement, ou null si y'a rien.
 
Enfin, ça sert à rien de faire un SELECT *, vu qu'on ne fait que tester. Suffit d'un SELECT id, pas besoin de toute la ligne...

Code :
  1. SqlConnection myConnection = (SqlConnection)Session["myConnection"];
  2. SqlCommand myCommand = new SqlCommand("SELECT id FROM matable WHERE id = @id", myConnection); 
  3. myCommand.Parameters.Add(new SqlParameter("@id", SqlDbType.Char, 100)); 
  4. myCommand.Parameters["@id"].Value = "2"; 
  5. if (myCommand.ExecuteScalar() == null) // Vérifier syntaxe, je connais pas assez le cécharppe
  6.   Response.Write("Element pas present dans la base" ); 
  7. else 
  8.   Response.Write("Element present dans la base" );

n°1135718
moi23372
Posté le 30-06-2005 à 12:09:52  profilanswer
 

si tu veux pas avoir de probleme avec le null qui pose tjs probleme en général
 
tu changes légèrement la requete
 
SELECT count(id) FROM matable WHERE id = @id
 
voila et ça te renvera 0 s'il n'existe pas...
 
ATTENTION 0 n'est pas égale à NULL

n°1135721
FlorentG
Posté le 30-06-2005 à 12:10:35  profilanswer
 

Non, le null ne pose pas problème, vu que c'est un des retour possible de ExecuteScalar() [:spamafote]

n°1135899
moi23372
Posté le 30-06-2005 à 14:15:45  profilanswer
 

ici oui, mais dans d'autre cas il peut poser problème! de ce fait j'évite impérativement de retourner un null dans mes programmes! c'est une méthode de travail quoi! ici je ne dis pas que ça vient du null, mais moi personnellement je préfère l'éviter

n°1135904
FlorentG
Posté le 30-06-2005 à 14:18:02  profilanswer
 

*ouch* tu retourne quoi à la place ? :heink:

mood
Publicité
Posté le 30-06-2005 à 14:18:02  profilanswer
 

n°1135962
ixemul
Nan mais sans blague ! ⚡
Posté le 30-06-2005 à 14:47:08  profilanswer
 

D'ailleur, il me vient une petite idee sur un debat à lancer...
 
 
Mieux vaut-il utiliser une instruction d'egalité sous la forme
 

Code :
  1. if(MonObjet == null)


 
Ou plutot
 

Code :
  1. if(MonObjet.Equals(null))


 
 :??:

n°1135987
herks
Posté le 30-06-2005 à 15:03:38  profilanswer
 

ixemul a écrit :

D'ailleur, il me vient une petite idee sur un debat à lancer...
 
 
Mieux vaut-il utiliser une instruction d'egalité sous la forme
 

Code :
  1. if(MonObjet == null)


 
Ou plutot
 

Code :
  1. if(MonObjet.Equals(null))


 
 :??:


 
Moi aussi ca m'interresse de savoir le pourquoi du comment.
 
En tout k merci a tous pour vos reponses

n°1136006
FlorentG
Posté le 30-06-2005 à 15:10:37  profilanswer
 

ixemul a écrit :

D'ailleur, il me vient une petite idee sur un debat à lancer...
 
 
Mieux vaut-il utiliser une instruction d'egalité sous la forme
 

Code :
  1. if(MonObjet == null)


 
Ou plutot
 

Code :
  1. if(MonObjet.Equals(null))


 
 :??:


En VB.NET, le problème ne se pose presque pas, on utilise généralement :

If Object Is Nothing Then


Sachant que Nothing est l'équivalent de null

n°1136022
ixemul
Nan mais sans blague ! ⚡
Posté le 30-06-2005 à 15:17:21  profilanswer
 

Ha ben ouais, mais j'ai delaissé le VB 6 que je ne pouvait plus voir en couleur pour passer à DotNet il y a 1 an maintenant et mon choix c'est naturellement porté sur C# qui me faisait plus tripper en me renvoyant à de vieux souvenirs de C++/java d'étudiant  :sweat:  
 
Bref, ma question reste en suspends, si qqun avait le pourquoi du comment il vaut mieux utiliser l'un ou l'autre... question de perf, de conso mémoire ou tout autre explication ca me ferait enormement plaisir  :D

n°1136056
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 30-06-2005 à 15:35:55  profilanswer
 

ixemul a écrit :

D'ailleur, il me vient une petite idee sur un debat à lancer...
 
 
Mieux vaut-il utiliser une instruction d'egalité sous la forme
 

Code :
  1. if(MonObjet == null)


 
Ou plutot
 

Code :
  1. if(MonObjet.Equals(null))


 
 :??:


ça dépend de ce que tu compares.
si tu compares 2 types valeur, alors utiliser l'un ou l'autre est exactement la même chose :

Code :
  1. int a = 5;
  2. int b = 5;
  3. Console.WriteLine(a == b);
  4. Console.WriteLine(a.Equals(b));


te renverra  

Citation :


true
true


 
par contre, si tu compares 2 types references, == fera une comparaison d'identité (les references pointent t'elles sur le même objet ?) , tandis que Equals comparera les valeurs.

Code :
  1. Int32 a = new Int32(5);
  2. Int32 b = new Int32(5);
  3. Console.WriteLine (a == b);
  4. Console.WriteLine (a.Equals(b));


te renverra

Citation :


false
true


attention à l'exception par contre : l'operateur == de la classe String compare les valeurs, et non les references (même si c'est un type reference). il en est de même pour System.Object
 
pour éviter toute ambiguité, le mieux est d'utiliser Equals() si tu veux comparer les valeurs, et ReferenceEquals si tu veux comparer les references.


---------------
J'ai un string dans l'array (Paris Hilton)
n°1136067
ixemul
Nan mais sans blague ! ⚡
Posté le 30-06-2005 à 15:43:07  profilanswer
 

:love: LA lumiere !
 
merci beaucoup, ça a son importance  :jap:


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

  [c#]Verifier qu'un enregistrement est present dans la BDD

 

Sujets relatifs
[ASP/Access]Comment je peux consulter et afficher un enregistrement[MySQL] sélection aléatoire d'enregistrement en fonction de ....
erreur ajout d'enregistrementprobleme d'insertion dans ma BDD
Verifier une date venant d'un formulaireComment vérifier plusieurs variables d'un seul coup ?
[VB] passer à l'enregistrement suivant dans 1 dataAccess atteindre un enregistrement spécial
probleme appel date du jour dans BDDPlace enregistrement VB6/SQL
Plus de sujets relatifs à : [c#]Verifier qu'un enregistrement est present dans la BDD


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