J'ai du mal à remplir ma list

gruf - Modifié par NHenry le 23/05/2016 à 14:19
Whismeril Messages postés 19025 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 19 avril 2024 - 24 mai 2016 à 17:14
Bonjour,
j'ai créé une classe Lot puis une liste Lot dans cette classe mais une fois mon Reader en lecture list.Add renvoi une erreur "les données sont null cette méthode ne peut pas être appelée sur des valeurs Nulles.

public List<Lot>getAllLot(string query) {
List<Lot> list =new List<Lot> () ;
if (dao.openConnection()) {
MySqlConnection conn = new MySql.Data.MySqlClient.MySqlConnection("server=localhost;database=pharmacie;uid=root;pwd=sqlserver12;");
MySqlCommand cmd =new MySqlCommand(query,conn);
conn.open();
MySqlDataReader reader =new cmd.ExecuteReader();

while(reader.Read()) {
list.Add(new Lot {
numlot=reader.GetString (0),
dateFabrication=reader.GetDateTime(1),
dateLivraison =reader.GetDateTime(2),
datePeremption =reader.GetDateTime(3),)});
}
reader.Close();
dao.closeConnection();
}
return list;
}


EDIT : Ajout des balises de code (la coloration syntaxique).
Explications disponibles ici : ICI

Merci d'y penser dans tes prochains messages.

5 réponses

Whismeril Messages postés 19025 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 19 avril 2024 656
23 mai 2016 à 19:15
Bonjour


c'est qu'à un moment ou un autre un enregistrement est vide ou ne contient pas toutes les données.

Tu devrais essayer de décomposer:
while(reader.Read())
{
   Lot monLot = new Lot {
   numlot=reader.GetString (0),
   dateFabrication=reader.GetDateTime(1),
   dateLivraison =reader.GetDateTime(2),
   datePeremption =reader.GetDateTime(3)};

   list.Add(monLot);

}



Au moment ou ça plante, regarde le contenu du champ du reader et de monLot.
0
Merci mais cela me renvoi ceci " error Lot.getAllLot(string)': not all code paths return a value"
0
public List<Lot>getAllLot(string query) {

List<Lot> list =new List<Lot> () ;

if (dao.openConnection()) {

MySqlConnection conn = new

MySql.Data.MySqlClient.MySqlConnection("server=localhost;

database=pharmacie;uid=root;pwd=sqlserver12;");

MySqlCommand cmd =new MySqlCommand(query,conn);

conn.open();

MySqlDataReader reader =new cmd.ExecuteReader();

while(reader.Read()) {

list.Add(new Lot { // c'est à partir d'ici que j'ai l'erreur null

numlot=reader.GetString (0),

dateFabrication=reader.GetDateTime(1),

dateLivraison =reader.GetDateTime(2),

datePeremption =reader.GetDateTime(3),)});
} // jusque là

reader.Close();
dao.closeConnection();
}
return list;
}
0
Whismeril Messages postés 19025 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 19 avril 2024 656
23 mai 2016 à 22:19
Il faudrait que tu mettes le code complet de la méthode, parce que là je ne voie pas.
0
Whismeril Messages postés 19025 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 19 avril 2024 656
24 mai 2016 à 06:41
Ça c'est deux fois le même code, je t'ai proposé de décomposé pour essayer de mieux cerné l'erreur et tu as répondu qu'il y avait une nouvelle erreur.

C'est donc le nouveau code qu'il faut montrer.

Et en utilisant la coloration syntaxique comme indiqué par NHenry dans la correction de ton premier message s'il te plait.

Et tant qu'à faire en utilisant le bouton "répondre" plutôt que d'ajouter un commentaire à un message antérieur.
0
Bonjour merci en découpant j'ai trouver l'erreur. l'autre problème c'est que mon datagridview ne se rempli pas avec les données de ma base j'utilise ma methode précédente getAllLot . Voici mon code :


public class Maga {

// lote est une instance de la class Lot

Dtgvmaga.DataSource = lote.getAllLot() ;

 }


0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Whismeril Messages postés 19025 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 19 avril 2024 656
24 mai 2016 à 17:14
Et bien toujours pour deboguer, découpe

public class Maga {
   List<Lot> list = lote.getAllLot();
   Dtgvmaga.DataSource  = list;//tu mets un point d'arrêt ici. Si list est vide le datagridview ne peut pas se remplir.

 }


0
Rejoignez-nous