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

VB.NET Discussion :

L'exception NullReferenceException n'a pas été gérée


Sujet :

VB.NET

  1. #1
    Membre à l'essai
    Inscrit en
    Novembre 2008
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 29
    Points : 13
    Points
    13
    Par défaut L'exception NullReferenceException n'a pas été gérée
    Je suis débutant SVP
    Je développe en VB.net 2008 Express avec un Framework 3.5
    Mon Problème est le suivant:
    Lorsque je veux enrégistrer des données saisies, j'ai l'exception suivante qui s'affiche:L'exception NullReferenceException n'a pas été gérée.

    Une partie du PRG qui pose problème dès la première ligne avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    'création d'une nouvelle ligne avec les données des textbox
    dtr("nom") = Me.Nom.Text
    dtr("prénom") = Me.Prénoms.Text
    dtr("Lieu de Naissance") = Me.LieuNais.Text

  2. #2
    Expert éminent
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Points : 7 660
    Points
    7 660
    Par défaut
    NullReferenceException indique qu'un objet n'a pas été initialisé (référence nulle, Nothing en VB). Vu le code, je dirais que dtr vaut Nothing.

    Met un point d'arrêt sur la ligne incriminée et vérifie l'état de tes différentes variables. Tu verras vite où est le problème.
    Pas de questions techniques par MP

  3. #3
    Modérateur
    Avatar de Sankasssss
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2006
    Messages
    1 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 842
    Points : 4 232
    Points
    4 232
    Par défaut
    Bonsoir,
    Si dtr est comme je le pense un datarow, lit l'aide msdn à son propos...

    Mis à part ca personne ne pourra vraiment t'aider avec aussi peut de code...
    Comment savoir que les colonnes nom, prénom etc sont bien créée etc...

  4. #4
    Membre à l'essai
    Inscrit en
    Novembre 2008
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 29
    Points : 13
    Points
    13
    Par défaut
    Chers amis Je vous présente le code, parce que je n'arrive pas à comprende.
    Au départ j'ai une connexion vers une base de données access 2007 qui marche apparemment, parce que j'arrive à afficher les données. Tout le problème se pose quand je veux enregistrer ou modifier. Est-ce que je dois déclarer les champs de la base?
    au niveau de la ligne du N°inscription il me sort le message suivant quand je veux enrégistrer:
    Le format de la chaîne d'entrée est incorrect.Impossible de stocker <> dans la colonne N°Inscription. Type attendu est Int32.
    SVp Venez moi en aide et soyez indulgent, je suis débutant.

    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
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
     Private Sub BntModifier_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BntModifier.Click
     
            'récupération de la ligne dans le datarow
            dtr = dts.Tables("Étudiants").Rows(rownum)
     
            'modification des donées
     
            dtr("nom") = Me.Nom.Text
            dtr("prénom") = Me.Prénoms.Text
            dtr("Lieu de Naissance") = Me.LieuNais.Text
            dtr("Téléphone personnel") = Me.TélPersonnel.Text
            dtr("Téléphone professionnel") = Me.TélProfessionnel.Text
            dtr("Téléphone mobile") = Me.TelMobile.Text
            dtr("Page Web") = Me.Mail.Text
            dtr("Numéro de télécopie") = Me.Télécopie.Text
            dtr("Adresse") = Me.Adresse.Text
            dtr("Ville") = Me.Ville.Text
            dtr("Code Postal") = Me.CP.Text
            dtr("Département") = Me.Departement.Text
            dtr("Remarques") = Me.Remarque.Text
            dtr("ID étudiant") = Me.IDEtudiant.Text
            dtr("Date Inscription") = Me.DateInscription.Text
            dtr("N°Inscription") = Me.NumInscription.Text
            dtr("Heure Inscription") = Me.Hinscription.Text
     
            dtr("Nom contact en cas d'urgence") = Me.ContactUrgence.Text
            dtr("Téléphone du contact pour les urgences 1") = Me.Tél1Urgence.Text
            dtr("Téléphone du contact pour les urgences 2") = Me.Tél2Urgence.Text
            dtr("Relation contact pour les urgences") = Me.RelationUrgence.Text
            dtr("Nom du médecin") = Me.NomMedecin.Text
            dtr("Numéro de tél du médecin") = Me.TélMedecin.Text
            dtr("Allergies") = Me.Allergies.Text
            dtr("Médicaments") = Me.Médicaments.Text
     
            dtr("Etablissements") = Me.ComBoBoxEtab.Text
            dtr("Classe") = Me.ComboBoxClasse.Text
            dtr("Niveau") = Me.ComboBoxNiveau.Text
            dtr("N°Exo") = Me.ComboBoxExo.Text
            dtr("Pays/Région") = Me.ComboBoxPays.Text
            dtr("Spécialité") = Me.ComboBoxSpécialité.Text
            dtr("Date de naissance") = Me.ComoboboxDateNais.Text
     
     
     
            'création et exécution du commandbuilder
            'pour mettre à jour le DataAdapter
            cmdb = New OleDbCommandBuilder(dta)
     
            'mise à jour des données du DataAdapter
            'à partir du commandbuilder
            dta.Update(dts, "Étudiants")

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    374
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 374
    Points : 451
    Points
    451
    Par défaut
    Bonjour,
    les types de champs du datarow doivent correspondre aux données mise à jour.
    Si le champ dtr est int32 tu dois lui passer un nombre valide, de même pour les champs datetime.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    dim Int as integer
    if integer.tryparse(Me.NumInscription.Text,int) then
    dtr("N°Inscription") = Me.NumInscription.Text
    else
    dtr("N°Inscription") = 0(par exemple)
    end if
    bon boulot Jean

  6. #6
    Modérateur
    Avatar de Sankasssss
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2006
    Messages
    1 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 842
    Points : 4 232
    Points
    4 232
    Par défaut
    Le conseil de StormimOn est très bon, il te conseil d'apprendre à débuger tes application avec des points d'arret...
    Quand ton application est en pause tu peux regarder les valeurs de tes variables.
    Je te conseil de lire ces deux pages (et tout le cour si ce n'est déjà fait) :
    http://plasserre.developpez.com/v4-200.htm
    http://plasserre.developpez.com/v4-210.htm

    Sinon,il y a aussi le test de l'existence de la colonne dans la table que tu peux faire (car si elle n'existe pas c'est considéré comme nothing et donc NullReferenceException ) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    If dts.Tables("Étudiants").Columns.Contains("nom") then
        dtr("nom") = Me.Nom.Text
    else
        msgbox("la colonne nom n'existe pas")
    end if
    et ca pour chaque colonne bien sur...


    le conseil de JPelli est tout aussi bon, il te faut donc caster au bon type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    try
       dtr("N°Inscription") = cInt(Me.NumInscription.Text)
    catch
       ' traitement de l'erreur ex : msgbox("Veuillez rentrer uniquement du numérique pour ce champs") 
        ' bien que normalement ce test devrait être effectué avant de commencer a insérer les valeurs...

  7. #7
    Membre à l'essai
    Inscrit en
    Novembre 2008
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 29
    Points : 13
    Points
    13
    Par défaut
    J'ai pu résoudre le problème de Int32 mais j'ai tjrs le même pblm pour le bouton Enrégistrement tout au début avec l'erreur suivante:

    L'exception NullReferenceException n'a pas été gérée
    La référence d'objet n'est pas définie à une instance d'un objet:
    La modification proposée par sankassss n'a pas resolu le pblm. Merci sankassss

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    dtr("nom") = Me.Nom.Text
            dtr("prénom") = Me.Prénoms.Text
            dtr("Lieu de Naissance") = Me.LieuNais.Text
            dtr("Téléphone personnel") = Me.TélPersonnel.Text
            dtr("Téléphone professionnel") = Me.TélProfessionnel.Text
            dtr("Téléphone mobile") = Me.TelMobile.Text
    Et puis avec le bouton modifer j'ai la nouvelle erreur:
    L'exception OledbException n'a pas été géré
    Erreur de syntaxe dans l'instruction UPDATE. dta.Update(dts, "Étudiants")

    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
    'création et exécution du commandbuilder
            'pour mettre à jour le DataAdapter
            cmdb = New OleDbCommandBuilder(dta)
     
            'mise à jour des données du DataAdapter
            'à partir du commandbuilder
            dta.Update(dts, "Étudiants")
     
            'on vide le dataset pour le recréer avec 
            'les nouvelles données 
            dts.Clear()
            dta.Fill(dts, "Étudiants")
            dtt = dts.Tables("Étudiants")
     
            'mise à jour du datagrid
            DataGridView1.DataSource = dtt
     
            'retour au début du fichier
            rownum = 0

  8. #8
    Modérateur
    Avatar de Sankasssss
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2006
    Messages
    1 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 842
    Points : 4 232
    Points
    4 232
    Par défaut
    Tu as essayer de mettre un point d'arret sur la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    dtr = dts.Tables("Étudiants").Rows(rownum)
    et de passer ton curseur sur la variable dtr pour savoir si elle est bien instanciée?

    Pour ton autre erreur je ne peut pas t'aider, le seul conseil que je peux te donner c'est d'éviter de mettre des accents dans le nom de tes tables et de tes colonnes...

  9. #9
    Membre à l'essai
    Inscrit en
    Novembre 2008
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 29
    Points : 13
    Points
    13
    Par défaut
    J'ai fais ce que vs avez dit.
    C'est à dire un point d'arrêt. il sort le message suivant:
    dtr nothing

  10. #10
    Modérateur
    Avatar de Sankasssss
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2006
    Messages
    1 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 842
    Points : 4 232
    Points
    4 232
    Par défaut
    donc tu as ta réponse...
    l'index rownum pointe sur un élément qui n'existe pas...

    tjs avec le point d'arret il te suffit de passer ton curseur sur rownum et de regarder sa valeur et de voir si tu as autant d'enregistrement dans ta table...
    (propriété de la table rows.count)
    N'oublie pas que ton index doit être égale au maximum à rows.count - 1 !!!

  11. #11
    Membre à l'essai
    Inscrit en
    Novembre 2008
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 29
    Points : 13
    Points
    13
    Par défaut
    Tout a été vérifiié mais en plus les champs existe mais en plus j'ai modifié en proposant la solution suivante mais ça ne marche pas:


    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
     'crátion d'une nouvelle ligne avec les données des textbox
     
            If Me.Nom.Text Is Nothing Then
                dtr("Nom") = String.Empty
            Else
                dtr("Nom") = Me.Nom.Text
            End If
     
     'ajout de la ligne dans le DataSet
            dts.Tables("Etudiants").Rows.Add(dtr)
     
            'création et exécution du commandbuilder
            'pour mettre à jour le DataAdapter
            cmdb = New OleDbCommandBuilder(dta)
     
            'mise à jour des données du DataAdapter
            'à partir du commandbuilder
            dta.Update(dts, "Etudiants")
     
            'on vide le dataset pour le recréer avec 
            'les nouvelles données 
            dts.Clear()
            dta.Fill(dts, "Etudiants")
            dtt = dts.Tables("Etudiants")
     
            'mise à jour de la datagrid
            DataGridView1.DataSource = dtt
     
            'aller au début du fichier
            rownum = 0

  12. #12
    Membre à l'essai
    Inscrit en
    Novembre 2008
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 29
    Points : 13
    Points
    13
    Par défaut
    Merci pour votre aide et sollicitude
    J'ai trouvé la solution il fallait déclarer dtr de la manière suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    dtr = dts.Tables("Etudiants").NewRow

  13. #13
    Modérateur
    Avatar de Sankasssss
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2006
    Messages
    1 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 842
    Points : 4 232
    Points
    4 232
    Par défaut
    ca découle de source
    nous pensions que tu voulais modifier le contenu présent dans une ligne...
    je te conseil de lire l'aide msdn : http://msdn.microsoft.com/fr-fr/libr...datatable.aspx
    ca t'aidera à bien maitriser les dataset

  14. #14
    Nouveau Candidat au Club Avatar de manouicone2019
    Homme Profil pro
    novice
    Inscrit en
    Juillet 2019
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : novice
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Juillet 2019
    Messages : 1
    Points : 0
    Points
    0
    Par défaut conseil
    bonjour essaye ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if isdbnull (dts.Tables("Étudiants").Rows(rownum)) then
    Nom.Text="" else
    Nom.Text=dts.Tables("Étudiants").Rows(rownum))

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 11/12/2011, 21h31
  2. Réponses: 7
    Dernier message: 07/11/2010, 04h12
  3. Réponses: 4
    Dernier message: 13/07/2010, 13h29
  4. Réponses: 9
    Dernier message: 03/05/2010, 17h40
  5. L'exception OleDBException n'a pas été gérée
    Par neo62matrix dans le forum VB.NET
    Réponses: 2
    Dernier message: 10/05/2007, 11h27

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