ADO.NET Gestion des relations Visual C# - SQL Server 2000 L. Hassouni 1 ADO.NET GESTION DES RELATIONS D’une base de données SQL Server(JDNotation) Objectif du TP : Réaliser un projet qui permet d’exploiter les relations qui existent entre les tables d’une base de données SQL Server à l’aide des objets DataSet et DataRelation. Le schéma de la base est fourni ci-dessous : ADO.NET Gestion des relations Visual C# - SQL Server 2000 L. Hassouni 2 Correction
private void EffacerListes(){ LsbCodeMatière.Items.Clear();
LsbLibelleMatiere.Items.Clear();
LsbCoefficient.Items.Clear();
LsbNumEpreuve.Items.Clear();
LsbDate.Items.Clear();
LsbLieu.Items.Clear();
LsbNumEtudiant.Items.Clear();
LsbNomPrenom.Items.Clear();
LsbNote.Items.Clear();} private void MatieresDuModule(DataRow ModRow, DataRelation MyRel){ foreach (DataRow MatRow in ModRow.GetChildRows(MyRel)){ LsbCodeMatière.Items.Add(MatRow["CodeMatière"].ToString());
LsbLibelleMatiere.Items.Add(MatRow["LibelléMatière"].ToString());
LsbCoefficient.Items.Add(MatRow["Coefficient"].ToString());} }
private void EpreuvesEnMatieres(DataRow MatRow, DataRelation MyRel){ LsbNumEpreuve.Items.Clear();
LsbDate.Items.Clear();
LsbLieu.Items.Clear();
LsbNumEtudiant.Items.Clear();
LsbNomPrenom.Items.Clear();
LsbNote.Items.Clear();
foreach (DataRow EprRow in MatRow.GetChildRows(MyRel)){ LsbNumEpreuve.Items.Add(EprRow["NumEpreuve"].ToString());
LsbDate.Items.Add(EprRow["DateEpreuve"].ToString());
LsbLieu.Items.Add(EprRow["Lieu"].ToString());} }
private void NotesEnEpreuve(DataRow EprRow, DataRelation MyRelEnf, DataRelation MyRelPar){ LsbNumEtudiant.Items.Clear();
LsbNomPrenom.Items.Clear();
LsbNote.Items.Clear();
foreach (DataRow NotRow in EprRow.GetChildRows(MyRelEnf)){ LsbNumEtudiant.Items.Add(NotRow["NumEtudiant"].ToString());
LsbNomPrenom.Items.Add(NotRow.GetParentRow(MyRelPar)["Nom"].ToString()+ " " + NotRow.GetParentRow(MyRelPar)["Prénom"].ToString());
LsbNote.Items.Add(NotRow["Note"].ToString());} } ADO.NET Gestion des relations Visual C# - SQL Server 2000 L. Hassouni 3
private void BtnConnexion_Click(object sender, System.EventArgs e){ MyStrConn = "Server = localhost; Integrated Security = SSPI; Initial Catalog = SQLJDNotation";
MyConn = new SqlConnection(MyStrConn);
MyStrModules = "SELECT * FROM Modules";
MyStrMatières = "SELECT * FROM Matières";
MyStrEpreuves = "SELECT * FROM Epreuves";
MyStrNotes = "SELECT * FROM Notes";
MyStrEtudiants = "SELECT * FROM Etudiants";
MyCmdModules = new SqlCommand(MyStrModules, MyConn);
MyCmdMatieres = new SqlCommand(MyStrMatières, MyConn);
MyCmdEpreuves = new SqlCommand(MyStrEpreuves, MyConn);
MyCmdNotes = new SqlCommand(MyStrNotes, MyConn);
MyCmdEtudiants = new SqlCommand(MyStrEtudiants, MyConn);
MyAdapModules = new SqlDataAdapter();
MyAdapModules.SelectCommand = MyCmdModules;
MyAdapMatieres = new SqlDataAdapter(MyCmdMatieres);
MyAdapEpreuves = new SqlDataAdapter(MyCmdEpreuves);
MyAdapNotes = new SqlDataAdapter(MyCmdNotes);
MyAdapEtudiants = new SqlDataAdapter(MyCmdEtudiants);
MyDataSet = new DataSet();
MyAdapModules.Fill(MyDataSet, "Modules");
MyAdapMatieres.Fill(MyDataSet, "Matières");
MyAdapEpreuves.Fill(MyDataSet, "Epreuves");
MyAdapNotes.Fill(MyDataSet, "Notes");
MyAdapEtudiants.Fill(MyDataSet, "Etudiants");
// Définitions des contraintes clés primaires
MyDataSet.Tables["Modules"].PrimaryKey = new DataColumn[]{MyDataSet.Tables["Modules"].Columns["CodeModule"]};
MyDataSet.Tables["Matières"].PrimaryKey = new DataColumn[]{MyDataSet.Tables["Matières"].Columns["CodeMatière"]};
MyDataSet.Tables["Epreuves"].PrimaryKey = new DataColumn[]{MyDataSet.Tables["Epreuves"].Columns["NumEpreuve"]};
MyDataSet.Tables["Etudiants"].PrimaryKey = new DataColumn[]{MyDataSet.Tables["Etudiants"].Columns["NumEtudiant"]};
MyDataSet.Tables["Notes"].PrimaryKey = new DataColumn[]{MyDataSet.Tables["Notes"].Columns["NumEpreuve"],MyDataSet.Tables["Notes"].Columns["NumEtudiant"]};
// Définitions des relations entre les tables
RelModMat = MyDataSet.Relations.Add("ModMat", MyDataSet.Tables["Modules"].Columns["CodeModule"], MyDataSet.Tables["Matières"].Columns["CodeModule"]);
RelMatEpr = MyDataSet.Relations.Add("MatEpr", MyDataSet.Tables["Matières"].Columns["CodeMatière"], MyDataSet.Tables["Epreuves"].Columns["CodeMatière"]);
RelEprNot = MyDataSet.Relations.Add("EprNot", MyDataSet.Tables["Epreuves"].Columns["NumEpreuve"], MyDataSet.Tables["Notes"].Columns["NumEpreuve"]);
RelEtuNot = MyDataSet.Relations.Add("FKEtuNot", MyDataSet.Tables["Etudiants"].Columns["NumEtudiant"], MyDataSet.Tables["Notes"].Columns["NumEtudiant"]);
NbEnreg = MyDataSet.Tables["Modules"].Rows.Count;
NumEnreg = 0;
MyRow = MyDataSet.Tables["Modules"].Rows[NumEnreg];
TxtCodeModule.Text = MyRow["CodeModule"].ToString();
TxtLibelleModule.Text = MyRow["LibelléModule"].ToString();
EffacerListes();
MatieresDuModule(MyRow, RelModMat);
} ADO.NET Gestion des relations Visual C# - SQL Server 2000 L. Hassouni 4
private void LsbCodeMatière_SelectedIndexChanged(object sender, System.EventArgs e){ int Rang;
Rang = LsbCodeMatière.SelectedIndex;
LsbLibelleMatiere.SelectedIndex = Rang;
LsbCoefficient.SelectedIndex = Rang;
// Recherche de l'enregistrement dans la table matière qui correspond
// à la ligne sélectionné
MyFindRow = MyDataSet.Tables["Matières"].Rows.Find(LsbCodeMatière.SelectedItem.ToString());
// Affichage des epreuves en la matières
EpreuvesEnMatieres(MyFindRow, RelMatEpr);} private void LsbNumEpreuve_SelectedIndexChanged_1(object sender, System.EventArgs e){ int Rang;
Rang = LsbNumEpreuve.SelectedIndex;
LsbDate.SelectedIndex = Rang;
LsbLieu.SelectedIndex = Rang;
// Recherche de l'enregistrement dans la table matière qui correspond
// à la ligne sélectionné
MyFindRow = MyDataSet.Tables["Epreuves"].Rows.Find(short.Parse(LsbNumEpreuve.SelectedItem.ToString()));
// Affichage des epreuves en la matières
NotesEnEpreuve(MyFindRow, RelEprNot, RelEtuNot);} private void BtnPremier_Click(object sender, System.EventArgs e){ NumEnreg = 0;
MyRow = MyDataSet.Tables["Modules"].Rows[NumEnreg];
TxtCodeModule.Text = MyRow["CodeModule"].ToString();
TxtLibelleModule.Text = MyRow["LibelléModule"].ToString();
EffacerListes();
MatieresDuModule(MyRow, RelModMat);} private void BtnPrecedent_Click(object sender, System.EventArgs e){ if (NumEnreg ==0)
MessageBox.Show("Vous êtes sur le premier enregistrement");else {
NumEnreg--;
MyRow = MyDataSet.Tables["Modules"].Rows[NumEnreg];
TxtCodeModule.Text = MyRow["CodeModule"].ToString();
TxtLibelleModule.Text = MyRow["LibelléModule"].ToString();
EffacerListes();
MatieresDuModule(MyRow, RelModMat);} } ADO.NET Gestion des relations Visual C# - SQL Server 2000 L. Hassouni 5
private void BtnSuivant_Click(object sender, System.EventArgs e){ if (NumEnreg == NbEnreg-1)
MessageBox.Show("Vous êtes sur le dernier enregistrement");else {
NumEnreg++;
MyRow = MyDataSet.Tables["Modules"].Rows[NumEnreg];
TxtCodeModule.Text = MyRow["CodeModule"].ToString();
TxtLibelleModule.Text = MyRow["LibelléModule"].ToString();
EffacerListes();
MatieresDuModule(MyRow, RelModMat);} }
private void BtnDernier_Click(object sender, System.EventArgs e){ NumEnreg = NbEnreg-1;
MyRow = MyDataSet.Tables["Modules"].Rows[NumEnreg];
TxtCodeModule.Text = MyRow["CodeModule"].ToString();
TxtLibelleModule.Text = MyRow["LibelléModule"].ToString();
EffacerListes();
MatieresDuModule(MyRow, RelModMat);
}