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 :

référence d'objet n'est pas définie à une instance d'un objet


Sujet :

C#

  1. #1
    Membre régulier
    Inscrit en
    Décembre 2005
    Messages
    271
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 271
    Points : 91
    Points
    91
    Par défaut référence d'objet n'est pas définie à une instance d'un objet
    Bonjour,

    J'ai eu cette erreur :
    La référence d'objet n'est pas définie à une instance d'un objet

    J'ai bien compris que cela se produisant lorsque l'on avait pas instancié l'objet avant...Mias pourtant j'ai bien l'impression de l'avoir fait

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     DataSet ds_bus_stop = a.getDataSet("SELECT `ID_BUS_STOP`,`LAT`,`LNG` FROM `bus_stop` WHERE LAT BETWEEN " + lower_lat_string + " AND " + higher_lat_string + " AND LNG BETWEEN " + lower_lng_string + " AND " + higher_lng_string + " ORDER BY `LNG`");
    a est un champ privé de ma classe

    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
     AccessBDD a = new AccessBDD();
            
    
            //Connection to the database
            try
            {
                a.connect();
            }
            catch (Exception e)
            {
                Console.WriteLine("{0} Exception caught.", e);
            }
    
            DataSet ds_total_bus_stop = a.getDataSet("SELECT count(*) FROM `bus_stop`");//ici ca marche

    J'ai voulu rajouté un bout de code juste avant le premier bout de code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    try
            {
                a.connect();
            }
            catch (Exception e)
            {
                Console.WriteLine("{0} Exception caught.", e);
            }
    et là j'obtiens la même erreur mais géré par le catch()


    Voilà la méthode getDataSet :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    public DataSet getDataSet(String qry)
    	{
    		DataSet ds = new DataSet();
    		MySqlDataAdapter da = new MySqlDataAdapter(qry,c);
    		da.Fill(ds);
    		return ds;
    	}
    Et voici ma méthode main :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    static void Main(string[] args)
            {
                DateTime date = new DateTime(1,1,1,11,23,0);
                Search s1 = new Search("week", 1, date);
                s1.nearestBusStopCoordinatesDep("53,34", "-6,215");
            }
    Voilà .. je ne comprend vraiment pas puisque j'ai déjà procédé de la même manière et que ça a marché ...

    Merci d'avance

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 99
    Points : 122
    Points
    122
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    try
    {
        a.connect();     // Si c'est là ne cherche pas ailleurs
    }
    catch (Exception e)
    {
        Console.WriteLine("{0} Exception caught.", e);
    }
    Vérifie ta classe AccessBDD, la fonction Connect : je pressens une String de connection à null ou quelque chose du genre.

    Passo

  3. #3
    Rédacteur
    Avatar de Louis-Guillaume Morand
    Homme Profil pro
    Cloud Architect
    Inscrit en
    Mars 2003
    Messages
    10 839
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Cloud Architect
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2003
    Messages : 10 839
    Points : 28 252
    Points
    28 252
    Par défaut
    comme tu dis, soit ton objet "a" n'est pas instancié, soit l'erreur se trouve dans la méthode connect(). Fais du DEBUG pas à pas et tu te rendras compte qu'il y a un soucis dans ton code à un endroit donné.
    le DEBUG est là pour ca


    ps: pourquoi mettre un try catch uniquement autour du a.connect()? et pas mettre tona.getDataSet dans le try également
    moi c'est Louis-Guillaume, ni Louis, ni Guillaume mais Louis-Guillaume et je n'aide pas ceux qui écorchent mon nom

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 99
    Points : 122
    Points
    122
    Par défaut
    Houlà! A la première lecture je n'avais pas vu le "ici ça marche" complétement à droite. Du coup, je ne suis plus sûr d'avoir bien compris, quand tu dis
    J'ai voulu rajouté un bout de code juste avant le premier bout de code :
    On est d'accord que ça donne ça?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    AccessBDD a = new AccessBDD();
    try
    {
     a.connect(); 
    }
    catch (Exception e)
    {
     Console.WriteLine("{0} Exception caught.", e);
    }
    et qu'une exception est lancée?

    OU
    c'est quand tu ajoutes AccessBDD a = new AccessBDD(); que ça marche?

    ET
    ça vient d'où ce 'c' dans
    MySqlDataAdapter da = new MySqlDataAdapter(qry,c);

    Passo

  5. #5
    Membre régulier
    Inscrit en
    Décembre 2005
    Messages
    271
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 271
    Points : 91
    Points
    91
    Par défaut
    poru être un peu plus clair :
    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
     
     
    public class Search
    {
    private AccessBDD a;
     
    public Search(String new_day, int new_what, DateTime new_time_of_departure)
    {
        AccessBDD a = new AccessBDD();
        try
        {
            a.connect();
        }
         catch (Exception e)
        {
                Console.WriteLine("{0} Exception caught.", e);
        }
     
    //Cette partie marche !
            DataSet ds_total_bus_stop = a.getDataSet("SELECT count(*) FROM `bus_stop`");
            DataTableReader reader_total_bus_stop = ds_total_bus_stop.CreateDataReader();
     
    }

    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
     
     
     private List<int> nearestBusStopCoordinates(float lat_of_departure, float lng_of_departure,float lower_lat, float higher_lat, float lower_lng, float higher_lng)
    {
     
            String lower_lat_string = lower_lat.ToString().Replace(",",".");
            String higher_lat_string = higher_lat.ToString().Replace(",", ".");
            String lower_lng_string = lower_lng.ToString().Replace(",", ".");
            String higher_lng_string = higher_lng.ToString().Replace(",", ".");
     
    //cette partie ne marche pas      
            DataSet ds_bus_stop = a.getDataSet("SELECT `ID_BUS_STOP`,`LAT`,`LNG` FROM `bus_stop` WHERE LAT BETWEEN " + lower_lat_string + " AND " + higher_lat_string + " AND LNG BETWEEN " + lower_lng_string + " AND " + higher_lng_string + " ORDER BY `LNG`");
            DataTableReader reader_bus_stop = ds_bus_stop.CreateDataReader();
     
    }
    Dans le constructeur, le a.getDataSet marche mais pas dans la fonction suivante.

    Merci de votre aide !

    Edit : Bon après une petite pause, je pense que tout vient de l'objet a : si je rajoute "AccessBDD a = new AccessBDD(); " dans ma deuxieme fonction, ça marche...

    Mais je ne comprend pas pourquoi je devrai la reinstancié alors que je l'ai déjà instancié dans le constructeur et que c'est un champ privé de la classe...

  6. #6
    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
    Citation Envoyé par Treuze Voir le message
    Mais je ne comprend pas pourquoi je devrai la reinstancié alors que je l'ai déjà instancié dans le constructeur et que c'est un champ privé de la classe...
    Vu ton code malheureusement tu fais une grosse erreur qui est à l'origine de tout ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public Search(String new_day, int new_what, DateTime new_time_of_departure)
    {
        AccessBDD a = new AccessBDD();
        ...
    }
    Dans le constructeur tu masques complétement ton champ privé en déclarant et initialisant une variable locale de même nom, résultat ton champ privé n'est pas initialisé. Enlève la déclaration et ca devrait aller mieux après

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public Search(String new_day, int new_what, DateTime new_time_of_departure)
    {
        a = new AccessBDD();
        ...
    }
    Pas de questions techniques par MP

  7. #7
    Membre régulier
    Inscrit en
    Décembre 2005
    Messages
    271
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 271
    Points : 91
    Points
    91
    Par défaut



    Merci beaucoup

  8. #8
    Nouveau membre du Club
    Inscrit en
    Février 2008
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 22
    Points : 25
    Points
    25
    Par défaut
    Bonjour,

    J'ai le même message d'erreur lors de mes tests unitaire.

    Voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    [TestMethod]
    public void TestConjointBenevolePassed()
    {
                BenevoleValidation benevoleDeTest = new BenevoleValidation();
                string numConjoint = "10003";
                Assert.IsTrue(benevoleDeTest.EstConjointBenevole(numConjoint));
    }
    Voici la fonction EstConjointBenevole :

    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
     
    public bool EstConjointBenevole(string numC)
     {
                Model_AGEDataContext age_dc = new Model_AGEDataContext();
                int numeroConjoint = 0;
     
                if (numC == "")
                {
                    return true;
                }
                else
                {
                    numeroConjoint = System.Convert.ToInt32(numC);
                }
     
                var listeNumero = from b in age_dc.Benevoles
                                  where numeroConjoint == b.numeroBenevole
                                  select new
                               {
                                   b.numeroBenevole
                               };
     
                int c = 0;
                foreach (var i in listeNumero)
                {
                    c++;
                }
     
                if(c == 0)
                {
                    return( false);
                }
                return(true);
    }

    J'ai un autre test unitaire qui lui fonctionne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    [TestMethod]
    public void TestNoteBenevolePassed1()
    {
                BenevoleValidation benevoleDeTest = new BenevoleValidation();
                string noteBenevole = "";
                Assert.IsTrue(benevoleDeTest.EstNoteValide(noteBenevole));
    }
    EstNoteValide ne fais pas d'appelle à la base de donné.

    Alors je pensais que le problème venait de la base de donnée mais la fonction dans le 1er code n'est pas appellé alors que dans le dernier bou si...

    Je comprend pas vraiment là...

    Une idée?

    Merci.

  9. #9
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Septembre 2010
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2010
    Messages : 8
    Points : 11
    Points
    11
    Par défaut la reférence d'objet n'est pas une instance d'objet
    Bjr, je rencontre également le problème de reférence à un objet.

    Voici mon objet:

    ProxyServiceContact.ContractContactClient serviceContac = new ProxyServiceContact.ContractContactClient();

    et voici comment je l'utilise:

    tout d'abord j'initialise le service :

    serviceContac.GetGroupeCompleted += new EventHandler<ProxyServiceContact.GetGroupeCompletedEventArgs>(serviceContac_GetGroupeCompleted);

    void serviceContac_GetGroupeCompleted(object sender, ProxyServiceContact.GetGroupeCompletedEventArgs e)

    {

    //throw new NotImplementedException();

    Grpes = e.Result;

    MessageBox.Show("Grpes contient : " + Grpes.Length + " éléments");

    CMB_GroupAb.DataSource = null;

    CMB_GroupAb.DataSource = Grpes;

    }

    ensuite je l'utilise:

    public void Lister_Groupe()

    {

    try

    {

    serviceContac.GetGroupeAsync();

    MessageBox.Show("operation reussie");

    }

    catch (TimeoutException te)

    {

    MessageBox.Show(this, te.Message, "Temps d'inactivité trop long - " + appTitle,

    MessageBoxButtons.OK, MessageBoxIcon.Hand);

    }

    catch (System.ServiceModel.CommunicationException ex)

    {

    MessageBox.Show(this, ex.Message, "La connexion au serveur a été interrompue - " + appTitle,

    MessageBoxButtons.OK, MessageBoxIcon.Hand);

    }

    catch (NullReferenceException ex)

    {

    MessageBox.Show(this, ex.Message, "Vous appelez une reférence null - " + appTitle,

    MessageBoxButtons.OK, MessageBoxIcon.Hand);

    }

    catch (Exception ex)

    {

    MessageBox.Show(this, ex.Message, "Erreur inattendue - " + appTitle,

    MessageBoxButtons.OK, MessageBoxIcon.Hand);

    }

    finally

    {

    serviceContac = null;

    }

    }

    Auu premier clic, la combo se rempli. Mais lorsque je clique une deuxième fois, je recois le message d'erreur:
    'la référence d'objet n'est pas définie a une instance d'objet'

    Quelqu'un aurait une suggestion à me faire? merci d'avance!

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 28/09/2007, 10h38
  2. Réponses: 2
    Dernier message: 09/09/2007, 14h25
  3. Réponses: 8
    Dernier message: 04/06/2007, 16h20
  4. Réponses: 24
    Dernier message: 01/06/2007, 09h26
  5. Réponses: 8
    Dernier message: 11/07/2006, 17h27

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