[C#] Probleme sur les clés primaires composites
Salut !!!
Je suis en train de réaliser une petite application dont le but est de gérer les eleves.
Ma base de donnée est celle-ci :
Eleve(NumEle,NomEle,PreEle,DatNai)
Classe(NumCla,NomCla)
Appartenir(#NumEle,#NumCla,Annee)
voila un début de menu:
- Lister les classes
- Ajouter les classes
- Recherche de la classe
- Ajouter Eleve(Nom,Prenom,DateNaissance) de la classe
saisie
Voila le principe de l'application.
J'ai un souci c'est que je n'arrive pas inserer les valeurs dans la table appartenir correspondant au identifiant NumEle, et NumCla
ex: 1 / info
1/ toto/tata/19801212
appartenir (1,1,2000) -> cette insertion je n'arrive pas à l'effectuer
Voila comment j'ai procédé:
Code:
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
|
Console.WriteLine("Entrer un nom de l'eleve");
unePersonne.Nom = Console.ReadLine();
Console.Write("Quel est le prénom ?");
unePersonne.Prenom = Console.ReadLine();
Console.Write("Quelle est sa date de naissance aaaammjj ?");
unePersonne.DateNaissance = Convert.ToString(Console.ReadLine());
maSqlCmd.CommandText="Insert into Eleve(NOMELE,PREELE,DATNAIELE)values('"+unePersonne.Nom+"','"+unePersonne.Prenom+"','"+unePersonne.DateNaissance+"')";
maSqlCmd.ExecuteNonQuery();
CmdNumEle.CommandText="Select max(NumEle)from Eleve";
DRNumEle = CmdNumEle.ExecuteReader();
while(DRNumEle.Read()){
Console.WriteLine("numero id :"+DRNumEle.GetInt32(0).ToString());
}
DRNumEle.Close();
CmdNumCla.CommandText="Select NumCla from Classe where NomCla='"+sNomCla+"'";
DRNumCla = CmdNumCla.ExecuteReader();
while(DRNumCla.Read()){
Console.WriteLine("numero id :"+DRNumCla.GetInt32(0).ToString());
}
DRNumCla.Close();
Console.WriteLine("Entrer l'année d'etude ");
sAnnee = Console.ReadLine();
maSqlCmd2.CommandText="Insert into appartenir(numcla,numele,annee)values('"+DRNumCla+"','"+DRNumEle+"','"+sAnnee+"')";
maSqlCmd2.ExecuteNonQuery(); |
J'obtiens une erreur dont je n'arrive pas a comprendre d'ou cela peut provenir
Erreur de syntaxe lors de la conversion de la valeur varchar 'System.Data.SqlClient.SqlDataReader' vers une colonne de type de données int.
L'application s'interrompt une fois que j'insere l'année de son etude
l'insertion se fait correctement pour la table classe et eleve , en revanche la table appartenir , je n'y arrive pas.
J'espere que j'ai été clair.
Merci d'avance pour votre aide
Stardeus
[C#] : pb sur les clés primaires composites
Merci de m'avoir repondu :)
Bah en fait tu avais raisons a propos des apostrophes. Et c'etait ça qui générait un pb dans mon application.
Cependant un autre message d'erreur est apparu c'est :
le nom SqlDataReader n'est pas autorisé dans ce contexte. Seules sont autorisées les constantes et les variables ( ce qui est exact).
Donc j'ai testé ceci:
Code:
1 2 3 4
| int iNumCla = Convert.ToInt32(DRNumCla);
int INumEle = Convert.ToInt32(DRNumEle);
insert into appartenir("iNumCla","iNumEle",'"sAnnee"'); |
ceci ne fonctionne pas
Donc ma question est:
Comment déclarer une variable qui puisse s'associé a la requete SQL?
ou plutot comment récupérer la valeur projetée par le requete SQL par l'intermédiaire d'une variable?
Merci d'avance pour votre aide :)
Stardeus
[C#] : probleme sur les clés primaires composites
Excuse moi sur la requete que j'avais mis:
Code:
1 2 3 4 5
|
int iNumCla = Convert.ToInt32(DRNumCla);
int INumEle = Convert.ToInt32(DRNumEle);
insert into appartenir("iNumCla","iNumEle",'"sAnnee"'); |
J'ai oublié de mettre les +. Ceci avait tout de mm généré le mm message d'erreur.
Donc comment puis je déclaré une variable qui puisse etre associé a ma requete projetée?
celle que j'ai fait ci dessus ne fonctionne pas car il m'indique que je ne peux pas convertir en int un dataReader 'DRNumCla'
Pour résumé: je cherche un moyen de recuperer la valeur projeté par la requete sql ( DRNumCla.CommandText='select numcla from classe') pour l'intégrer dans une variable?
Merci pour votre aide ;)
Stardeus
[Résolu][C#]:Pb sur les clé primaires composites
Salut
J'ai resolu mon pb.
Je remercie à pleymo et leseb,jab pour m'avoir aider.
La solution etait de faire un datareader suivi d'une conversion qui s'effectue a l'interieur de la boucle while
Sur ce bonne journée