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 :

insérer la valeur null dans une colonne


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 571
    Par défaut insérer la valeur null dans une colonne
    Bonjour tout le monde,

    après plusieurs recherche, je me tourne vers vous pour le problème suivant car je ne trouve pas comment faire :
    je réalise une application en C# sous VS2005 avec une base de données sous SQL Server 2000.
    Mon application représente la gestion du personnelle dans laquelle j'utilise un dataSet et des dataAdapter.
    Je souhaiterais savoir comment je peux faire pour rendre une colonne de ma table tp1_employe de ma base de données vide (à null quoi) pour une certaine ligne??

    Merci d'avance!!

  2. #2
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Par défaut
    Utiliser la constante DBNull (définie dans la classe Convert).

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 571
    Par défaut réponse à Bluedeep
    J'ai fais de la manière suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    this.BindingContext[dbDs, "tp1_employe.sce"].Equals(System.DBNull.Value);
    mais cela ne fonctionne pas, dans la base de données, la valeur est inchangé.

    Cordialement.

  4. #4
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Par défaut
    Je ne comprends pas ce que tu as posté. Le code source que tu mets correspond à un test de nullité sur la colonne (dont tu n'exploites pas le retour) pas à une affectation.

  5. #5
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2008
    Messages
    337
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2008
    Messages : 337
    Par défaut
    Si tu utilise un bindingSource ce qui devrait être ton cas tu peus faire comme cela :



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    //récupère la ligne courrante 
     DataRowView row = (DataRowView)MonBindingSource.Current;
    //Insert la valeur null dans la colonne "Colonne"
     row["Colonne"] = DBNull.Value;
    //Mise à jour
     MonBindingSource.EndEdit();
    MonTableAdapter.Update(MonDataset);
    Bonne continuation a bientot !

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 571
    Par défaut
    voici le code se situant dans le formulaire service ou j'en ai besoin:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
         int i;
                        for (i = 1; i <= this.BindingContext[dbDs, "tp1_service.serviceemploye"].Count; i++)
                        {
                            //récupère la ligne courrante 
                            DataRowView row = this.BindingContext[dbDs, "tp1_service.serviceemploye"].Current as DataRowView;
                            //Insert la valeur null dans la colonne "Colonne"
                            row["sce"] = DBNull.Value;
                            //Mise à jour
                            this.BindingContext[dbDs, dbDs.tp1_employe.TableName].EndCurrentEdit();
                            //   MonTableAdapter.Update(MonDataset);
                        }
    Voici le code appelé et qui se situe dans le formulaire principal :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    public Fm_Menu()
            {
                InitializeComponent();
     
                dbDs_EmpSce1.Clear();
                dbAd_employe.Fill(dbDs_EmpSce1, "tp1_employe");
                dbDs_EmpSce1.tp1_employe.RowChanged += new DataRowChangeEventHandler(tp1_employe_RowChanged);
    }
     
               private void tp1_employe_RowChanged(object sender, DataRowChangeEventArgs e)
               {
                   if (e.Action == DataRowAction.Add || e.Action == DataRowAction.Change)
                   {
                       try
                       {
                           dbAd_employe.Update(new DataRow[] { e.Row });
     
                       }
                       catch (Exception pb)
                       {
                           MessageBox.Show(pb.ToString());
                           e.Row.RejectChanges();
                       }
                   }
               }
    Le problème c'est que cela met à null la première ligne de la table en question. Comment puis-je faire pour que cela me met à null les bonnes lignes??

    Cordialement

  7. #7
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 571
    Par défaut
    Bonjour,

    Ce que je veux réellement :
    J'ai un formulaire "service" et lorsque je supprime un service, je souhaite pouvoir conserver les employés de ce service.
    Dans ma base, j'ai 2 tables :
    1) tp1_employe(numero, nom, prenom,....,sce#)
    2) tp1_service(code, designation)
    sce# est la clé primaire correspondant au code de la table tp1_service.

    Lorsque je supprime juste le service(donc je conserve les employés), j'aimerai que la colonne sce (enfin au ligne correspondant au employé du service à supprimé) devienne null.

    Voici le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
            private void bt_suppression_Click(object sender, EventArgs e)
            {
                try
                {
                    DialogResult dr = MessageBox.Show("Voulez-vous supprimer les employés de ce service?", "Supprimer les employés", MessageBoxButtons.YesNo);
                    if (dr == DialogResult.Yes)
                    {
                        int i;
                        for (i = 1; i <= this.BindingContext[dbDs, dbDs.tp1_employe.TableName].Count; i++)
                        {
                            this.BindingContext[dbDs, "tp1_service.serviceemploye"].RemoveAt(this.BindingContext[dbDs, "tp1_service.serviceemploye"].Position);
                        }
                        this.BindingContext[dbDs, dbDs.tp1_service.TableName].RemoveAt(this.BindingContext[dbDs, dbDs.tp1_service.TableName].Position);
                        affichePosCpt();
                    }
                    else
                    {
                        //    this.BindingContext[dbDs, "tp1_employe.sce"].Equals(System.DBNull.Value);
                        this.BindingContext[dbDs, dbDs.tp1_service.TableName].RemoveAt(this.BindingContext[dbDs, dbDs.tp1_service.TableName].Position);
                        int i;
                        for (i = 1; i <= this.BindingContext[dbDs, dbDs.tp1_employe.TableName].Count; i++)
                        {
                            //récupère la ligne courrante 
                            DataRowView row = this.BindingContext[dbDs, "tp1_service.serviceemploye"].Current as DataRowView;
                            //Insert la valeur null dans la colonne "Colonne"
                            row.Row["sce"] = DBNull.Value;
                            //Mise à jour
                            this.BindingContext[dbDs, dbDs.tp1_employe.TableName].EndCurrentEdit();
                            //   MonTableAdapter.Update(MonDataset);
                        }
     
                        affichePosCpt();
                    }
                }
                catch(System.Exception pb)
                {
                    MessageBox.Show(pb.Message);
                }
            }
    Mon problème :
    1) Si
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    this.BindingContext[dbDs, dbDs.tp1_service.TableName].RemoveAt(this.BindingContext[dbDs, dbDs.tp1_service.TableName].Position);
    est avant le 'for' du 'else' il me met à null le premier employé se situant dans la base (table tp1_employe)
    2) Si
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    this.BindingContext[dbDs, dbDs.tp1_service.TableName].RemoveAt(this.BindingContext[dbDs, dbDs.tp1_service.TableName].Position);
    est après le 'for' du 'else' il ne peux pas supprimer le service en question vu qu'il n'a plus d'employé à lui.

    Comment puis-je faire alors pour supprimé juste le service et mettre à null les employés lui correspondants??

    Merci d'avance!!

  8. #8
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 571
    Par défaut
    Je souhaite utiliser la manière suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
            private void bt_suppression_Click(object sender, EventArgs e)
            {
                try
                {
                    DialogResult dr = MessageBox.Show("Voulez-vous supprimer les employés de ce service?", "Supprimer les employés", MessageBoxButtons.YesNo);
                    if (dr == DialogResult.Yes)
                    {
                        int i;
                        for (i = 1; i <= this.BindingContext[dbDs, dbDs.tp1_employe.TableName].Count; i++)
                        {
                            this.BindingContext[dbDs, "tp1_service.serviceemploye"].RemoveAt(this.BindingContext[dbDs, "tp1_service.serviceemploye"].Position);
                        }
                        this.BindingContext[dbDs, dbDs.tp1_service.TableName].RemoveAt(this.BindingContext[dbDs, dbDs.tp1_service.TableName].Position);
                        affichePosCpt();
                    }
                    else
                    {
                        //    this.BindingContext[dbDs, "tp1_employe.sce"].Equals(System.DBNull.Value)
                        int i;
                        for (i = 1; i <= this.BindingContext[dbDs, dbDs.tp1_employe.TableName].Count; i++)
                        {
                            //récupère la ligne courrante 
                            DataRowView row = this.BindingContext[dbDs, "tp1_service.serviceemploye"].Current as DataRowView;
                            //Insert la valeur null dans la colonne "Colonne"
                            row.Row["sce"] = DBNull.Value;
                            //Mise à jour
                            this.BindingContext[dbDs, dbDs.tp1_employe.TableName].EndCurrentEdit();
                            //   MonTableAdapter.Update(MonDataset);
                        }
                        this.BindingContext[dbDs, dbDs.tp1_service.TableName].RemoveAt(this.BindingContext[dbDs, dbDs.tp1_service.TableName].Position);
                        affichePosCpt();
                    }
                }
                catch(System.Exception pb)
                {
                    MessageBox.Show(pb.Message);
                }
            }
    la boucle 'for' fonctionne parfaitement c'est à dire que les employés sont bien à null mais le service ne veux pas se supprimer, voici le message d'erreur que j'obtiens :
    L'index -1 n'a pas de valeur.
    Quelqu'un pourrait-il m'aidai s'il vous plais pour pouvoir faire en sorte de supprimer le service??

    Merci d'avance!!

  9. #9
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 571
    Par défaut Résolution
    Je vient enfin de trouver le problème.

    Voici le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
            private void bt_suppression_Click(object sender, EventArgs e)
            {
                try
                {
                    DialogResult dr = MessageBox.Show("Voulez-vous supprimer les employés de ce service?", "Supprimer les employés", MessageBoxButtons.YesNo);
                    if (dr == DialogResult.Yes)
                    {
                        int i;
                        for (i = 1; i <= this.BindingContext[dbDs, dbDs.tp1_employe.TableName].Count; i++)
                        {
                            this.BindingContext[dbDs, "tp1_service.serviceemploye"].RemoveAt(this.BindingContext[dbDs, "tp1_service.serviceemploye"].Position);
                        }
                        this.BindingContext[dbDs, dbDs.tp1_service.TableName].RemoveAt(this.BindingContext[dbDs, dbDs.tp1_service.TableName].Position);
                        affichePosCpt();
                    }
                    else
                    {
                        //    this.BindingContext[dbDs, "tp1_employe.sce"].Equals(System.DBNull.Value)
                        int i;
                        for (i = 1; i <= this.BindingContext[dbDs, dbDs.tp1_employe.TableName].Count; i++)
                        {
                            //récupère la ligne courrante 
                            DataRowView row = this.BindingContext[dbDs, "tp1_service.serviceemploye"].Current as DataRowView;
                            //Insert la valeur null dans la colonne "Colonne"
                            row.Row["sce"] = DBNull.Value;
                            //Mise à jour
                            this.BindingContext[dbDs, dbDs.tp1_employe.TableName].EndCurrentEdit();
                            //   MonTableAdapter.Update(MonDataset);
                        }
                     //   this.BindingContext[dbDs, dbDs.tp1_service.TableName].RemoveAt(this.BindingContext[dbDs, dbDs.tp1_service.TableName].Position);
     
                    }
                }
                catch
                {
                    this.BindingContext[dbDs, dbDs.tp1_service.TableName].RemoveAt(this.BindingContext[dbDs, dbDs.tp1_service.TableName].Position);
                    affichePosCpt();
                }
            }
    Donc j'ai mis le code de suppression du service dans le catch.

    Cordialement

  10. #10
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Par défaut
    Citation Envoyé par loic20h28 Voir le message
    Donc j'ai mis le code de suppression du service dans le catch.

  11. #11
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 571
    Par défaut
    Citation Envoyé par Bluedeep Voir le message
    OUI??
    Que veux tu dire Bluedeep??

  12. #12
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Par défaut
    Citation Envoyé par loic20h28 Voir le message
    OUI??
    Que veux tu dire Bluedeep??
    Que tester la condition d'exception a posteriori pour faire un traitement normal me semble quelque peu aberrant.

    D'autant que tu ne test même pas le type d'exception.

  13. #13
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 571
    Par défaut
    Que tester la condition d'exception a posteriori pour faire un traitement normal me semble quelque peu aberrant.

    D'autant que tu ne test même pas le type d'exception.
    C'est pour cela qu'après ta réaction, j'ai décidé de faire de la manière suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    private void bt_suppression_Click(object sender, EventArgs e)
            {
                try
                {
                    DialogResult dr = MessageBox.Show("Voulez-vous supprimer les employés de ce service?", "Supprimer les employés", MessageBoxButtons.YesNo);
                    if (dr == DialogResult.Yes)
                    {
                        int i;
                        for (i = 1; i <= this.BindingContext[dbDs, dbDs.tp1_employe.TableName].Count; i++)
                        {
                            this.BindingContext[dbDs, "tp1_service.serviceemploye"].RemoveAt(this.BindingContext[dbDs, "tp1_service.serviceemploye"].Position);
                        }
                        this.BindingContext[dbDs, dbDs.tp1_service.TableName].RemoveAt(this.BindingContext[dbDs, dbDs.tp1_service.TableName].Position);
                        affichePosCpt();
                    }
                    else
                    {
                        //    this.BindingContext[dbDs, "tp1_employe.sce"].Equals(System.DBNull.Value)
                        int i;
                        for (i = 1; i <= this.BindingContext[dbDs, dbDs.tp1_employe.TableName].Count; i++)
                        {
                            //récupère la ligne courrante 
                            DataRowView row = this.BindingContext[dbDs, "tp1_service.serviceemploye"].Current as DataRowView;
                            //Insert la valeur null dans la colonne "Colonne"
                            row.Row["sce"] = DBNull.Value;
                            //Mise à jour
                            this.BindingContext[dbDs, dbDs.tp1_employe.TableName].EndCurrentEdit();
                            //   MonTableAdapter.Update(MonDataset);
                        }
                     //   this.BindingContext[dbDs, dbDs.tp1_service.TableName].RemoveAt(this.BindingContext[dbDs, dbDs.tp1_service.TableName].Position);
     
                    }
                }
                catch
                {
     
                }
    this.BindingContext[dbDs, dbDs.tp1_service.TableName].RemoveAt(this.BindingContext[dbDs, dbDs.tp1_service.TableName].Position);
                    affichePosCpt();
            }
    Est-ce mieux ou me conseillerais-tu de faire autrement??

    Cordialement

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

Discussions similaires

  1. [Elementum] Insertion de valeurs nulles dans une colonne numérique d'un table
    Par cquilgars dans le forum Autres outils décisionnels
    Réponses: 2
    Dernier message: 17/07/2012, 11h50
  2. Réponses: 2
    Dernier message: 08/03/2011, 11h53
  3. Insérer la valeur NULL dans une colonne de type number
    Par cocoaparis dans le forum PL/SQL
    Réponses: 8
    Dernier message: 08/07/2009, 15h46
  4. Réponses: 2
    Dernier message: 26/01/2009, 15h38
  5. Réponses: 5
    Dernier message: 11/07/2008, 08h37

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