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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Novembre 2008
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 29
    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
    Membre expérimenté
    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 : 47
    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
    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.

  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 : 43
    Localisation : Belgique

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

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 842
    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 averti
    Inscrit en
    Novembre 2008
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 29
    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 chevronné
    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
    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 : 43
    Localisation : Belgique

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

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 842
    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 averti
    Inscrit en
    Novembre 2008
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 29
    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

+ 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