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

C# Discussion :

Impossible d'enregistrer des valeurs ' Null ' ?


Sujet :

C#

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2013
    Messages : 67
    Points : 43
    Points
    43
    Par défaut Impossible d'enregistrer des valeurs ' Null ' ?
    Bonjour à tous je travaille sur une application de gestion dont j'ai un formulaire de saisie qui contient des textbox, combobox ...etc , alors le problème c'est que quand je laisse un champ vide il m'envoie la valeur 'nul' et pas une chaine vide , et quand j'envoie la requête vers la base
    c'est impossible d'enregistrer les données :
    ici je remplie l'objet :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     Suivi suiv=new Suivi();
    suiv.Restaurant_Resto = cmb_RestaurantResto.Text;
    suiv.Ajouter(suiv);
    et ici j'envoie la requête vers la base :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Declaration.cmd.CommandText = "INSERT INTO Suivi (Restaurant) values(@Restaurant)";
     Declaration.cmd.Parameters.Add("@Restaurant", OleDbType.VarChar).Value = suiv.Restaurant;
    Declaration.cmd.ExecuteNonQuery();
    Declaration.Deconnecter();
    alors ce que j'ai fait c'est avant d'envoyer la requête je vérifie si la valeur nul et le rends 'Chaine vide' :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
                if (suiv.Restaurant == null)
                {
                    suiv.Restaurant = "";
                }
    mais il me semble pas professionnelle et pratique , est ce qui il y a une autre manière de procéder et merci beaucoup

  2. #2
    Membre chevronné
    Avatar de PixelJuice
    Homme Profil pro
    Ingénieur .NET & Game Designer
    Inscrit en
    Janvier 2014
    Messages
    639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Ingénieur .NET & Game Designer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2014
    Messages : 639
    Points : 2 148
    Points
    2 148
    Par défaut
    C'est normal que les propriétés utilisés ne soit pas les mêmes ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    suiv.Restaurant_Resto = cmb_RestaurantResto.Text;
    et

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Declaration.cmd.Parameters.Add("@Restaurant", OleDbType.VarChar).Value = suiv.Restaurant;
    Parce que sinon , même si la TextBox est vide , cela affectera quand même un String vide a ta variable.

  3. #3
    Expert éminent
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 147
    Points : 7 392
    Points
    7 392
    Billets dans le blog
    1
    Par défaut
    D'un point de vue purement sémantique, la chaîne vide et NULL n'est pas du tout la même chose :
    - NULL = Non renseigné
    - Chaîne vide = Renseigné à vide

    Le plus simple, quand on se pose la question du NULL, c'est d'imaginer le cas de l'élève absent le jour du contrôle :
    - Doit-on créer une note à 0
    - Ne doit-on pas créer de note

    Au niveau de C# et de SQL, on fait bien la distinction (sauf avec Oracle et son type aberrant VARCHAR2)

    Dans un formulaire, tu récupères une chaîne vide à ta propriété Textbox.
    A tout de voir si c'est vide parce qu'on veut que ce soit vide, ou vide parce qu'on n'a pas l'information.

    Ensuite, vérifie dans la base de données que la colonne en question est bien nullable. Car lors de la création de la table, on a très bien pu mettre l'attribut "NOT NULL" et dans ce cas, il faudra forcément mettre une valeur.
    On ne jouit bien que de ce qu’on partage.

  4. #4
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2013
    Messages : 67
    Points : 43
    Points
    43
    Par défaut
    Oui c'est ça ce que je veux même si la TextBox est vide , il affectera un String vide a ma variable , mais il affecte 'null' et mon champs et en string et dans la base et en varchar ???

  5. #5
    Expert éminent
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 147
    Points : 7 392
    Points
    7 392
    Billets dans le blog
    1
    Par défaut
    PixelJuice t'a fait remarqué qu'à priori, tu n'utilise pas la bonne valeur lors de l'insertion en base. Tu as vérifié ?

    Après, quel est ton SGBD ?
    Vérifie ce que donne une insertion manuelle (en SQL directement dans une console) ce que donne l'insertion d'une chaîne vide dans ta colonne.

    Comme je t'ai dis, Oracle peut transformer une chaîne vide en NULL, et SQL Server aussi, si on le configure pour.
    On ne jouit bien que de ce qu’on partage.

  6. #6
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2013
    Messages : 67
    Points : 43
    Points
    43
    Par défaut
    Merci 'PixelJuice' merci 'StringBuilder' moi j'utilise Access comme bdd , et j'autorise les valeurs null dans mes champs , mais quand j'affecte un textbox vide a un attribut de type string il affecte à la place la valeur null ?

  7. #7
    Expert éminent
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 147
    Points : 7 392
    Points
    7 392
    Billets dans le blog
    1
    Par défaut
    Non, Access respecte la norme SQL sur ce point : chaîne vide et NULL sont bien différenciées.

    En revanche, je me rends compte que tu récupères le texte d'une variable "cmb" qui semble correspondre à une liste déroulante.

    Si aucun élément n'est choisi, alors la propriété Text est nulle, donc normal que tu enregistres NULL.

    C'est donc en amont, lorsque tu récupère le texte, que tu dois prendre :

    si selectedItem <> null alors Text
    sinon ""
    On ne jouit bien que de ce qu’on partage.

  8. #8
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2013
    Messages : 67
    Points : 43
    Points
    43
    Par défaut
    Mon problème c'est au niveau de l'enregistrement je ne peux pas enregistrer une valeur null ?

  9. #9
    Expert éminent
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 147
    Points : 7 392
    Points
    7 392
    Billets dans le blog
    1
    Par défaut
    Pouvez-vous poster un bout de code complet où vous tentez d'insérer NULL, et dites-nous ce qui coince.

    Car là j'avoue que vous m'avez perdu...
    On ne jouit bien que de ce qu’on partage.

  10. #10
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2013
    Messages : 67
    Points : 43
    Points
    43
    Par défaut
    Merci 'StringBuilder' j'ai mis le code au dessus ,et j'ai trouvé le problème d’où il vient , quand je met le style du combobox en DropDownStyle il affecte la valeur null à la place de vide quand le texte est vide ,alors ce que je fais c'est de vérifier la valeur de l'attribut avant de l'envoyer à la base.

  11. #11
    Expert éminent
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 147
    Points : 7 392
    Points
    7 392
    Billets dans le blog
    1
    Par défaut
    C'est en gros ce que j'avais dit hier

    Citation Envoyé par StringBuilder Voir le message
    En revanche, je me rends compte que tu récupères le texte d'une variable "cmb" qui semble correspondre à une liste déroulante.

    Si aucun élément n'est choisi, alors la propriété Text est nulle, donc normal que tu enregistres NULL.
    On ne jouit bien que de ce qu’on partage.

Discussions similaires

  1. [Toutes versions] Inclure les enregistrements possédant des valeurs Null
    Par michelr06 dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 05/05/2014, 15h31
  2. [MySQL] l'enregistrement des valeurs dans la table
    Par kmbuffon dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 29/04/2007, 12h41
  3. [SQL] Affichage des valeurs nulles dans un Count
    Par at_first dans le forum Access
    Réponses: 4
    Dernier message: 06/03/2007, 11h07
  4. NOT NULL enregistre des valeurs null
    Par tyberium dans le forum Langage SQL
    Réponses: 2
    Dernier message: 04/12/2006, 09h20
  5. Réponses: 7
    Dernier message: 20/03/2005, 14h53

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