Que signifie ce message d'erreur [débutant]

Que signifie ce message d'erreur [débutant] - C#/.NET managed - Programmation

Marsh Posté le 24-07-2006 à 16:01:39    

"La référence d'objet n'est pas définie à une instance d'un objet."
 
Voila. J'ai une requête et maintenant j'ai un problème avec les types de champs et le cast. Je ne comprend pas ce qu'il me demande.
 
 

Code :
  1. public Version[] getVersion(){
  2.             int i = 0;
  3.             SQLServer objManageSQL  = new SQLServer();           
  4.             Version[] objArrVersion = new Version[0];
  5.             objManageSQL.Connexion();
  6.             SqlDataReader reader = objManageSQL.Execute("SELECT idversion,version FROM tb_version ORDER BY [date]" );
  7.            
  8.                objArrVersion = new Version[1];
  9.                 while(reader.Read()){
  10.                     if(reader.GetValue(1) != DBNull.Value){                       
  11.                         objArrVersion[i].Id = (int) reader.GetSqlInt32(0); //il est la mon problème
  12.                     }
  13.                     if(reader.GetValue(2) != DBNull.Value){
  14.                         objArrVersion[i].Numero = (String) reader.GetSqlString(1); //la aussi.
  15.                     }
  16.                     i++;
  17.                 }                           
  18.             return objArrVersion;
  19.         }
  20.     }


 
Ce qui est chiant c'est que dans un autre proojet ça a fonctionné j'ai fais qu'une adaptation. J'en suis sur que c'est un truc de débutant et que dans 6 mois je vais me dire "Puneze dire que t'as lutté pour ça  :pfff: "
Quelqu'un aurait une idée?

Reply

Marsh Posté le 24-07-2006 à 16:01:39   

Reply

Marsh Posté le 24-07-2006 à 16:24:51    

=> tu tente d'accéder à un objet qui n'existe pas.
 
dans ta ligne qui merde, déjà :
 
(int) reader.GetSqlInt32(0)
=> le (int) est inutile, puisque que GetSqlInt32() retourne déjà un int, donc pas besoin de le transtyper.
=> vérifie que GetSqlInt32 existe bien dans reader
=> objArrVersion[0] n'est pas créé. La ligne ou tu mets "new Version[1]" à l'objet ne crée pas les objets à chaque ligne, ça ne fait que forcer le type.

Reply

Marsh Posté le 24-07-2006 à 16:36:11    

le pb se situe ligne 4 et ligne 9
- ligne 4: à quoi sert elle ? tu ne créé rien du tout ici
- ligne 9 : tu créé un tableau de 1 objet Version. or, plus tu vas incrémenter i, plus tu vas te déplacer dans ton tableau, et donc tu vas accéder à un objet qui n'existe pas (à partir de i == 2 en fait)
 
edit: [:benou_grilled]

Message cité 1 fois
Message édité par Harkonnen le 24-07-2006 à 16:36:34

---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 24-07-2006 à 16:38:56    

Harkonnen a écrit :

le pb se situe ligne 4 et ligne 9
- ligne 4: à quoi sert elle ? tu ne créé rien du tout ici
- ligne 9 : tu créé un tableau de 1 objet Version. or, plus tu vas incrémenter i, plus tu vas te déplacer dans ton tableau, et donc tu vas accéder à un objet qui n'existe pas (à partir de i == 2 en fait)
 
edit: [:benou_grilled]


pas complètement grillé, parceque j'avais pas vu le i++ qui pètera de toute façon à la seconde ligne :)

Reply

Marsh Posté le 24-07-2006 à 16:48:15    

Effectivement, j'avais trop le nez dedans pour manquer de recule. Des erreurs de débutant en plus qui n'est pas propre à ce language :/
Bon ben je vais aller me cacher  [:ciler]

Reply

Marsh Posté le 24-07-2006 à 16:53:13    

Berceker United a écrit :

Effectivement, j'avais trop le nez dedans pour manquer de recule. Des erreurs de débutant en plus qui n'est pas propre à ce language :/
Bon ben je vais aller me cacher  [:ciler]


ouais, si, en vb ça passe :D

Reply

Marsh Posté le 24-07-2006 à 17:02:36    

Voici le code modifier. Alors je sais qu'il aurait été préféré d'utiliser un ashTable mais bon comme c'est pour faire un petit truc en arriere plan je vais me contenter de cela. Je sais que j'utilise la technique du "Chien malade" pour définir la taille du tableau objArrVersion  
 
 

Code :
  1. public Version[] getVersion(){
  2.             int i = 0;
  3.             int NbElement = 0;
  4.             SQLServer objManageSQL  = new SQLServer();
  5.             Version[] objArrVersion = new Version[0];
  6.             objManageSQL.Connexion();
  7.             SqlDataReader readerCnt = objManageSQL.Execute("SELECT COUNT(idversion) FROM tb_version" );
  8.             if(readerCnt.Read())NbElement = (int)readerCnt.GetSqlInt32(0);
  9.             readerCnt.Close();
  10.             SqlDataReader reader = objManageSQL.Execute("SELECT idversion,version FROM tb_version" );
  11.             if(NbElement > 0){
  12.                 objArrVersion = new Version[NbElement];
  13.                
  14.                 while(reader.Read()){
  15.                     objArrVersion[i] = new Version();
  16.                     if(reader.GetValue(0) != DBNull.Value){                       
  17.                         objArrVersion[i].Id = (int) reader.GetValue(0); //idversion                         
  18.                     }
  19.                     if(reader.GetValue(1) != DBNull.Value){
  20.                         objArrVersion[i].Numero = (String) reader.GetSqlString(1);
  21.                     }
  22.                     i++;
  23.                 }                           
  24.             }
  25.             return objArrVersion;
  26.         }
  27.     }

Message cité 1 fois
Message édité par Berceker United le 24-07-2006 à 17:06:56
Reply

Marsh Posté le 24-07-2006 à 17:02:55    

Berceker United a écrit :

Effectivement, j'avais trop le nez dedans pour manquer de recule. Des erreurs de débutant en plus qui n'est pas propre à ce language :/


c'est exactement pour ce genre de raison qu'il ne faut surtout pas conseiller des langages comme le C à des débutants : si t'avais codé ça en C, t'aurais eu aucune erreur du compilo. par contre, t'aurais eu intéret à passer ta RAM au karcher ensuite :D


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 24-07-2006 à 17:03:32    

Arjuna a écrit :

ouais, si, en vb ça passe :D


<HS>tiens au fait, t'as vu que Taxiways a sorti une VA avec des canadairs ? :)</HS>


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 24-07-2006 à 17:05:10    

Berceker United a écrit :

Voici le code modifier. Alors je sais qu'il aurait été préféré d'utiliser un ashTable mais bon comme c'est pour faire un petit truc en arriere plan je vais me contenter de cela. Je sais aussi que l'attribution de la taille est fait à la technique du "chien malade" :D


mais vire moi la ligne 5 qui ne sert à rien [:psychokwak]


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 24-07-2006 à 17:05:10   

Reply

Marsh Posté le 24-07-2006 à 17:08:22    

Harkonnen a écrit :

mais vire moi la ligne 5 qui ne sert à rien [:psychokwak]


Je sais c'est crading mais il faut que je retourne un truc non ?
 
dite vous vous êtes tous reveillez en même temps? :D moi ça me dérange pas j'y gagne   :whistle:  
 
Merci en tous cas pour vos aide  :jap:

Message cité 1 fois
Message édité par Berceker United le 24-07-2006 à 17:09:38
Reply

Marsh Posté le 24-07-2006 à 17:14:45    

Berceker United a écrit :

Je sais c'est crading mais il faut que je retourne un truc non ?


ben oui, mais tu alloues déjà objArrVersion à la ligne 12 :spamafote:
 

Code :
  1. if(NbElement > 0){
  2.                   objArrVersion = new Version[NbElement];
  3.                    
  4.                   while(reader.Read()){
  5.                       objArrVersion[i] = new Version();
  6.                       if(reader.GetValue(0) != DBNull.Value){                        
  7.                           objArrVersion[i].Id = (int) reader.GetValue(0); //idversion                        
  8.                       }
  9.                       if(reader.GetValue(1) != DBNull.Value){
  10.                           objArrVersion[i].Numero = (String) reader.GetSqlString(1);
  11.                       }
  12.                       i++;
  13.                   }
  14.               return objArrVersion;                            
  15.               }
  16.       else
  17.               return null;


(plus sécurisé, à toi ensuite de tester le retour de ta fonction)
 
ce qu'il faut faire ligne 5, c'est juste déclarer objArrVersion :

Code :
  1. Version[] objArrVersion;



---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 24-07-2006 à 17:29:14    

Effectivement ça fait moin cradre et ça fonctionne. Je pensais qu'il fallait absolument qu'il y ait Version[] en sortie je ne pouvais pas retourner null.


Message édité par Berceker United le 24-07-2006 à 17:29:39
Reply

Marsh Posté le 25-07-2006 à 09:39:10    

Harkonnen a écrit :

<HS>tiens au fait, t'as vu que Taxiways a sorti une VA avec des canadairs ? :)</HS>


<hs>Ah ouais pas mal :) Mais j'attends quand même FS 2006 pour m'y remettre :)</hs>

Reply

Marsh Posté le 25-07-2006 à 11:04:32    

<hsII>Canadaire? Dommage que je n'ai plus trop le temps d'y jouer :( ça me manque il faut avouer. Mon rêve refaire un gros Antonov 225 bien balour  :love:</hsII>

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed