IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

ADO.NET Discussion :

Sqlparameter et nothing


Sujet :

ADO.NET

  1. #1
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2014
    Messages
    199
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2014
    Messages : 199
    Points : 70
    Points
    70
    Par défaut Sqlparameter et nothing
    Bonjour,

    J'utilise des requète paramétré pour accéder à la base via ADO: du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select * from table where id=@id
    avec new sqlparameter("id",valeur_id)

    Mon problème, c'est que mon id est type integer? (nullable)

    Il semblerait que quand le provider fait sa requète sur le serveur avec "id=nothing"
    il fait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select * from table where id=null
    au lieu de faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select * from table where id is null
    Du coup, les resultat ne sont pas bon. Et c'est pareil si je passe system.dbnull.value au lieu de nothing au sqlparameter

    Est ce que quelqu'un pourrait m'éclairer pour que la requète se fasse correctement ?
    A moins que je ne rate quelque chose

    Merci
    Sylo

  2. #2
    Rédacteur/Modérateur
    Avatar de Skalp
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2006
    Messages
    1 694
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 694
    Points : 2 927
    Points
    2 927
    Par défaut
    Si ta requête est sous forme de chaîne de caractères, le serveur Sql ne la modifiera pas.
    Une solution est de gérer ces 2 cas depuis le code avec quelque chose dans ce style :
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    if (valeur_id == null)
       query = "select * from table where id is null";
    else
       query = "select * from table where id=@id";
    C'est une proposition assez naïve, mais avec les informations que tu nous donnes, je ne peux pas t'aider plus.

  3. #3
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2014
    Messages
    199
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2014
    Messages : 199
    Points : 70
    Points
    70
    Par défaut
    Donc, si je fais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    dim Id as integer?=null
    dim Com as new sqlclient.sqlcommand("select * from table where id=@id")
    com.parameters.add(new sqlclient.sqlparameter("id",id)
    Je suis sur que la requète sera traduite par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "select * from table where id=null"
    SQLclient n'est pas capable de voir que id est null et de mettre "is null"

    C'est ça ?

    Si c'est le cas, il faut que pour chaque paramètre, je teste si la valeur est null, et dans ce cas utilisé une chaine de caractère dans ma requète plutot qu'un paramètre

    C'est cela ?

    Merci

  4. #4
    Rédacteur/Modérateur
    Avatar de Skalp
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2006
    Messages
    1 694
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 694
    Points : 2 927
    Points
    2 927
    Par défaut
    Non, Sql client n'est pas capable de voir que id est null et de mettre "is null".

    Mais je viens de penser que tu peux aussi écrire quelque chose comme ça : "select * from table where (id is null or id = @id)"

  5. #5
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2014
    Messages
    199
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2014
    Messages : 199
    Points : 70
    Points
    70
    Par défaut
    Ok, merci bcp

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [DisplayTag] "Nothing found to display" et pourtant !
    Par TraPpeur dans le forum Taglibs
    Réponses: 6
    Dernier message: 29/10/2008, 14h20
  2. [VB.NET] différence entre Nothing et 0
    Par zooffy dans le forum ASP.NET
    Réponses: 4
    Dernier message: 24/06/2006, 14h54
  3. [make] Nothing to be done for ...
    Par Zenol dans le forum Systèmes de compilation
    Réponses: 5
    Dernier message: 02/02/2006, 18h50
  4. Positionnemet des Nothing
    Par EvilAngel dans le forum ASP
    Réponses: 2
    Dernier message: 18/06/2004, 16h00
  5. Utilisation de x.close et set x=nothing
    Par kayser dans le forum ASP
    Réponses: 3
    Dernier message: 05/12/2003, 08h49

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo