Probleme execution d'une requete SELECT (tres bizarre :S)

Résolu
silverseb Messages postés 5 Date d'inscription jeudi 16 mars 2006 Statut Membre Dernière intervention 20 mars 2006 - 16 mars 2006 à 10:09
silverseb Messages postés 5 Date d'inscription jeudi 16 mars 2006 Statut Membre Dernière intervention 20 mars 2006 - 16 mars 2006 à 14:50
bonjour,
j'ai un probleme tres etrange j'ai beau cherché je ne comprend pas ce qu'il se passe. je m'explique J'ai une fonction rendID qui retourne un entier correspondant a l'identifiant d'un enregistrement d'une table
voici le code de la fonction :

Private Function rendID(ByVal nom As String, ByVal type As String) As Integer
Dim cnx As Data.SqlClient.SqlConnection
Dim cmd As Data.SqlClient.SqlCommand
Dim reader As Data.SqlClient.SqlDataReader
Dim ID As Integer
cnx = New Data.SqlClient.SqlConnection("Data Source=MANET;Initial Catalog=Intranet;User ID=InternetSQL;Password=m@deo")
cnx.Open()
cmd = cnx.CreateCommand
If type = "mode de commercialisation" Then cmd.CommandText "SELECT * FROM [PM0029_ModeDeCommercialisation] WHERE libelleModeComm'" & nom & "'"
reader = cmd.ExecuteReader
While reader.Read = True
ID = CType(reader("IDModeComm"), Integer)
End While
LErreur.Text &= "
rendID : SELECT * FROM [PM0029_ModeDeCommercialisation] WHERE libelleModeComm ='" & nom & "'"
ElseIf type = "option1" Then cmd.CommandText "SELECT * FROM [PM0029_Option1] WHERE nomOption1'" & nom & "'"
reader = cmd.ExecuteReader
While reader.Read = True
ID = CType(reader("IDOption1"), Integer)
End While
LErreur.Text &= "
rendID : SELECT * FROM [PM0029_Option1] WHERE nomOption1 ='" & nom & "'"
Else cmd.CommandText "SELECT * FROM [PM0029_Option2] WHERE nomOption2'" & nom & "'"
reader = cmd.ExecuteReader
While reader.Read = True
ID = CType(reader("IDOption2"), Integer)
End While
LErreur.Text &= "
rendID : SELECT * FROM [PM0029_Option2] WHERE nomOption2 ='" & nom & "'
"
End If
reader.Close()
cnx.Dispose()
cnx.Close()
LErreur.Text &= " Return" & ID & "
"
Return ID
End Function


les tables ModeDeCommercialisation et Option1 n'ont que 2 champs ID et libellé et il n'y a pas de probleme. Par contre la table Option2 a 3 champs ID, libelle et nbPoste.
Le probleme c'est que quand nbPoste n'est pas null le ID retourné est toujours 0 .
Voici ce qu'il y a dans ma table Option2
nomOption2 nbPoste IDOption2
Réseau monoposte 1 1
Réseau 2 postes 2 2
Réseau 4 postes 4 3
Réseau 8 postes 8 4
Réseau 16 postes 16 5
aucune option NULL 7

Ca marche quand nom='aucune option' et pas pour les autres, j'ai fais un test en enregistrant une option avec un nbPoste null et, ca marche aussi donc ca viendrait du nbPoste qui n'est pas null mais pourquoi ??? Je ne comprend vraiment pas parce que la requete est bonne.
Aider moi svp merci

4 réponses

cs_Yopyop Messages postés 586 Date d'inscription lundi 7 janvier 2002 Statut Membre Dernière intervention 10 février 2010 1
16 mars 2006 à 13:49
salut,

je suis pas sûr mais je me demande si le problème ne viendrait pas du "é" de Réseau
il se peut que la valeur de ta variable "nom" ne soit pas "Réseau", mais "Reacute;seau" (les paramêtres sont encodés en html).

Il faut également (suivant la base de données que tu utilises) faire attention aux majuscules minuscule.

Essaie de "forcer" la valeur de "nom" pour tester.

yopyop
3
silverseb Messages postés 5 Date d'inscription jeudi 16 mars 2006 Statut Membre Dernière intervention 20 mars 2006
16 mars 2006 à 14:05
C'est bien ça c'est à cause du "é" !!! merci


comment fait -tu pour forcer la valeur de nom ?
0
cs_Yopyop Messages postés 586 Date d'inscription lundi 7 janvier 2002 Statut Membre Dernière intervention 10 février 2010 1
16 mars 2006 à 14:34
re,

ce que je ne comprends pas, c'est pourquoi tu utilises le nom et pas directement l'id ?

mais bon...

concernant le "é" il n'y a pas (à ma connaissance) de fonction inverse, il faut faire un replace au cas par cas nom.replace("eacute;","é")<- pas sûr du "eacute;".

Autrement, tu peut ajouter :

<pages validateRequest="false" />

Dans ton web.config dans:
<system.web>


</system.web>


Cela aura pour effet de ne pas faire de Server.HTMLEncode (entre autres) automatique et ton "é" restera un "é".
Mais il faudra bien tester toutes tes pages (si un utilisateur entre "
" dans une textbox (par example), et que tu réaffiches cette valeur sur une page web, les "<" et ">" ne seront plus remplacés par leur équivalents encodés.
Cela peut poser problème (imagine que quelqu'un entre un javascript, et bien il sera exécuté lors de l'affichage).

C'est pourquoi, lorsque j'utilise
<pages validateRequest="false" />

J'affiche toujours mes valeurs via Server.HTMLEncode par la suite.

Donc, pour résumer (c'est ma méthode perso pour les champs de type String):
- mettre <pages validateRequest="false" /> dans le web.config (cela empêche l'encodage des paramètres)

- lorsque je sauve dans la base je fais .Replace("'","''")
- lorsque j'affiche à l'écran j'utilise Server.HTMLEncode (mais pas toujours...)

Mais, encore une fois, je te conseille de passer directement par les id plutôt que par les libellés.

yopyop
0
silverseb Messages postés 5 Date d'inscription jeudi 16 mars 2006 Statut Membre Dernière intervention 20 mars 2006
16 mars 2006 à 14:50
Je passe par le nom parce que le but de la fonction est justement de retourné l'ID, si j'avais l'ID j'aurais besoin de cette fonction :p. j'ai trouver une solution pour mon problème j'utilise une procédure stockée comme ca il n'y a pas de probleme d'accent.
Merci de m'avoir aidé et bonne continuation
0
Rejoignez-nous