Ajout dans Base de Donnée Impossible

Résolu
Maiku Messages postés 190 Date d'inscription dimanche 10 avril 2005 Statut Membre Dernière intervention 4 juillet 2007 - 25 oct. 2005 à 11:58
Maiku Messages postés 190 Date d'inscription dimanche 10 avril 2005 Statut Membre Dernière intervention 4 juillet 2007 - 25 oct. 2005 à 20:22
Bonjour

Je developpe actuellement un logiciel de cuisine, en relation avec une base de donnee access dont le modèle logique conceptuel est le suivante :
Recettes(CodeRecette,NomRecette,Details)
Ingrédients(RefI,NomI)
Composer(CodeRecette,RefI)
Famille(RefF,NomF)

J'essaye actuellement d'ajouter une recette, ainsi que les ingredients qui la concerne,avec le code suivant :

En cliquant sur un Bouton Valider, je recupere dans un tableau ArrayList, la liste des ingrédients concernés par la recette, que l'utilisateur a selectionné :

if(this.IngredientA.Count==0)


{


i=0;


foreach (int index in this.ListIngredient.SelectedIndices)


{


ligne = ListIngredient.Items[index].ToString();


this.IngredientA.Add(ligne);


i=i+1;


}


}


else


{


MessageBox.Show("nombre element"+this.IngredientA.Count);


i = this.IngredientA.Count+1;


foreach(int index in this.ListIngredient.SelectedIndices)


{


ligne = ListIngredient.Items[index].ToString();


this.IngredientA.Add(ligne);


i=i+1;


}


}


foreach(string valeur in this.IngredientA)


{


MessageBox.Show(""+valeur);


}

En cliquant sur le bouton Ajouter , j'ajoute la recette dans la table recette, et tant qu'il y a des ingredients dans l'arraylist j'ajoute le coderecette et le refi de l'ingredient dans la table composer :


if(this.FamilleA.SelectedIndex<0 && this.ListIngredient.SelectedIndex<0 && this.NomR.Text!="" && this.DetailsA.Text!="")


{


MessageBox.Show("Vous ne pouvez ajouter une recette sans avoir précisé les ingrédients qui le compose","Attention",MessageBoxButtons.OK,MessageBoxIcon.Error);


}


else


{ lecteur = bd.Connection("Select NomRecette From Recettes " + " where NomRecette='"+this.NomR.Text+"'");


if(lecteur.HasRows==false)


{


try


{


string Details = this.DetailsA.Text;


string Nom = this.NomR.Text.Replace("'","''");


lecteur = bd.Connection("Select Count(*) From Recettes ");


string ligne = OneResult(lecteur);


int nb = int.Parse(ligne);


nb = nb + 1;


bd.Connection("INSERT INTO Recettes(CodeRecette,NomRecette,Details) " + " VALUES('"+nb+"','"+Nom+"','"+Details.Replace("'","''")+"') ");


foreach(string ingredient in this.IngredientA)


{


lecteur2=bd.Connection("Select RefI From Ingrédients " + " where NomI='"+ingredient+"'");


string ligne2 = OneResult(lecteur2);


int codei = int.Parse(ligne2);


MessageBox.Show(""+codei);


bd.Connection("INSERT INTO Composer(CodeRecette,RefI) " + " VALUES('"+nb+"','"+codei+"') ");


}


MessageBox.Show("Recette ajoutée avec success","Opération Réussie",MessageBoxButtons.OK,MessageBoxIcon.Information);


DialogResult reponse = MessageBox.Show("Voulez vous Ajouter une Autre Recette?","Nouvelle Recette ?",MessageBoxButtons.YesNo,MessageBoxIcon.Question);


if(reponse == DialogResult.Yes)


{


this.NomR.Text="";


this.DetailsA.Text="";


this.ListIngredient.Items.Clear();


this.FamilleA.Text="";


}


else


{


this.Close();


}


}


catch(OleDbException ode)


{


MessageBox.Show(ode.ToString());


}


}


else


{


MessageBox.Show("Une Recette est Unique.Le Nom que vous avez choisi pour votre recette existe deja dans la base de donnée","Impossible d'Ajouter",MessageBoxButtons.OK,MessageBoxIcon.Error);
}
}

Il me renvoie une erreure au niveau de mon foreach :

Une exception non gérée du type 'System.NullReferenceException' s'est produite dans system.data.dll


Informations supplémentaires : La référence d'objet n'est pas définie à une instance d'un objet.

Quelqu'un pourrait il me dire ce qui cloche dans mon code et comment le resoudre ?
Merci d'Avance

Maiku

6 réponses

MorpionMx Messages postés 3466 Date d'inscription lundi 16 octobre 2000 Statut Membre Dernière intervention 30 octobre 2008 57
25 oct. 2005 à 18:04
Cela pourrait en effet etre en cause.

Maintenant, va savoir ou...

ici ?

lecteur2=bd.Connection("Select RefI From Ingrédients " + " where NomI='"+ingredient+"'");


avec lecteur 2 qui serait null ?



As-tu essayé de mettre juste qques lignes de test dans ta bdd pour voir si l'erreur persiste ?


Mx
3
MorpionMx Messages postés 3466 Date d'inscription lundi 16 octobre 2000 Statut Membre Dernière intervention 30 octobre 2008 57
25 oct. 2005 à 13:02
Comme ca c'est tres difficile a dire...

Quelle est cette fonction OneResult ?



Au fait, prefere les String.Format() plutot que des concatenation de chaine avec +

Exemple

lecteur2 bd.Connection(String.Format("Select refI From ingredients where NomI '{0}'", ingredient));

au lieu de

lecteur2=bd.Connection("Select RefI From Ingrédients " + " where NomI='"+ingredient+"'");

Mx
0
Maiku Messages postés 190 Date d'inscription dimanche 10 avril 2005 Statut Membre Dernière intervention 4 juillet 2007
25 oct. 2005 à 14:33
Rebonjour

Alors OneResult est une fonction que j'utilise lorsque je suis certaine que ma requete ne me renvoie qu'un resultat sur une seule colonne, voici son code :

static string OneResult(OleDbDataReader lect)
{
string ligne="";
if(lect != null)
{
while (lect.Read())
{
ligne = lect.GetValue(0)+"";
}
}
return ligne;
}

Si je n'utilise pas le String.Format c'est parce que je comprend plus facilement la concatenation que le String.Format plus loin {0} ,j'y comprend pas grand chose, alors je prefere une concatenation au moins je suis sur de comprendre parfaitement ce que je fais.

Maiku
0
MorpionMx Messages postés 3466 Date d'inscription lundi 16 octobre 2000 Statut Membre Dernière intervention 30 octobre 2008 57
25 oct. 2005 à 16:40
Bon deja, vu que c'est System.Data.Dll qui te renvoit l'erreur, je suis
persuadé que l'erreur se trouve dans ta classe ou tu fais toutes tes
operations de base de données.

Essaie de catcher l'exception NullReferenceException dans cette classe, pour tenter d'avoir + de précisions sur l'erreur.

Mx
0

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

Posez votre question
Maiku Messages postés 190 Date d'inscription dimanche 10 avril 2005 Statut Membre Dernière intervention 4 juillet 2007
25 oct. 2005 à 17:26
Il me renvoie l'erreure suivante :

La Reference d'Objet n'est pas définie à une instance d'un objet.
Est ce que le fait que les tables Recettes et Composer soit vide peuvent être en cause ?
Car justement je veux remplir la base de données grâce au formulaire et pas en tapant le tout dans la base de données, donc ces deux tables sont vides pour le moment.

Maiku
0
Maiku Messages postés 190 Date d'inscription dimanche 10 avril 2005 Statut Membre Dernière intervention 4 juillet 2007
25 oct. 2005 à 20:22
Ca y est le problème est réglé, c'etait effectivement parce que la table recettes et la table composer etait vide, que cela ne marchait pas.

Merci de m'avoir éclairé
Maiku
0
Rejoignez-nous