Verifier qu'un enregistrement est present dans la BDD [c#] - C#/.NET managed - Programmation
Marsh Posté le 30-06-2005 à 10:52:50
myReader vaut pas null normalement quand ca retourne rien?
Marsh Posté le 30-06-2005 à 11:03:33
apparament ca retourne flase ou true
voici la nouvelle version du code:
Code :
|
si y'a d'autre soluce plus propre ou mieux optimisé je suis toujours preneur
Marsh Posté le 30-06-2005 à 11:04:33
Ca m'a l'air correct....faudrait un 'expert' pour t'en dire plus..genre FlorentG.
Marsh Posté le 30-06-2005 à 11:07:32
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 ^^
Marsh Posté le 30-06-2005 à 11:11:55
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 :
|
Marsh Posté le 30-06-2005 à 12:09:52
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
Marsh Posté le 30-06-2005 à 12:10:35
Non, le null ne pose pas problème, vu que c'est un des retour possible de ExecuteScalar()
Marsh Posté le 30-06-2005 à 14:15:45
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
Marsh Posté le 30-06-2005 à 14:47:08
D'ailleur, il me vient une petite idee sur un debat à lancer...
Mieux vaut-il utiliser une instruction d'egalité sous la forme
Code :
|
Ou plutot
Code :
|
Marsh Posté le 30-06-2005 à 15:03:38
ixemul a écrit : D'ailleur, il me vient une petite idee sur un debat à lancer...
|
Moi aussi ca m'interresse de savoir le pourquoi du comment.
En tout k merci a tous pour vos reponses
Marsh Posté le 30-06-2005 à 15:10:37
ixemul a écrit : D'ailleur, il me vient une petite idee sur un debat à lancer...
|
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
Marsh Posté le 30-06-2005 à 15:17:21
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
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
Marsh Posté le 30-06-2005 à 15:35:55
ixemul a écrit : D'ailleur, il me vient une petite idee sur un debat à lancer...
|
ç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 :
|
te renverra
Citation : |
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 :
|
te renverra
Citation : |
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.
Marsh Posté le 30-06-2005 à 10:50:07
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
Je suis preneur de tous conseil pour ameliorer et optimiser mon code.
Merci
Message édité par herks le 30-06-2005 à 11:06:32