Vous êtes sur la page 1sur 151

OFPPT

Office de la Formation Professionnelle et de la Promotion du Travail

A
FORMATEUR : BENTALEB MOHAMED

FILIERE :TDI

ETABLISSEMENT ISTA 2 SETTAT

OFPPT TDI

BENTALEB MOHAMED

TRAVAUX PRATIQUES

Page 2

OFPPT TDI

BENTALEB MOHAMED

TRAVAUX PRATIQUES

Page 3

OFPPT TDI

TRAVAUX PRATIQUES

TP N 1 : Cration dune Connexion.

Objectifs :
Dans cet atelier vous allez crer une connexion et afficher ltat de la connexion.

Travail demand :
1. Crer linterface ci-dessous :

2. crer une connexion et afficher un message qui indique ltat de la connexion.


Solution
using System.Data.SqlClient;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
private SqlConnection con = new SqlConnection();
public Form1()
{
InitializeComponent();
}

BENTALEB MOHAMED

Page 4

OFPPT TDI

TRAVAUX PRATIQUES

private void Form1_Load(object sender, EventArgs e)


{
con.ConnectionString = "server = (local);database
=Northwind;Trusted_Connection=yes";
// server = Data Source
// initial catalog = database
//Trusted_Connection=yes= Integrated Security=true et true =SSPI
con.Open();
MessageBox.Show(con.State.ToString ());
con.Close();
MessageBox.Show(con.State.ToString());
}
private void ouvrir_Click(object sender, EventArgs e)
{
con.Open();
MessageBox.Show(con.State.ToString());
}
private void Fermer_Click(object sender, EventArgs e)
{
con.Close();
MessageBox.Show(con.State.ToString());
}
private void Etat_Click(object sender, EventArgs e)
{
MessageBox.Show(con.State.ToString());
}
}
}

BENTALEB MOHAMED

Page 5

OFPPT TDI

TRAVAUX PRATIQUES

TP N 2 : utilisation du mode connect.

Objectif :
Dans cet exercice vous allez travailler avec les objets connection, command et
datareader.

Travail demand :
1. Crer linterface ci-dessous :

2. ajouter un combobox et crire le code qui permet de remplir le combobox par des
clients (Customers) de la base de donnes Northwind
La liste sera remplie par CustomerID et CompanyName
Solution
using System.Data.SqlClient;
namespace TP2
{
public partial class Form1 : Form
{
SqlConnection con = new SqlConnection();
SqlCommand cmd =new SqlCommand() ;
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
con.ConnectionString =
"Server=(local);"+
"Initial Catalog =Northwind"+
";Integrated Security=true";
//"Data Source=.;Initial Catalog=Northwind;Integrated Security=True "
con.Open();
//MessageBox.Show(con.State.ToString());

BENTALEB MOHAMED

Page 6

OFPPT TDI

TRAVAUX PRATIQUES
cmd.CommandText = "select
cmd.Connection = con;

customerid, companyname from customers";

SqlDataReader reader = cmd.ExecuteReader();


if (reader.HasRows)
{
while (reader.Read())
{
comboBox1.Items.Add(reader["customerid"] +
"
" + reader["companyname"]);
}
}
comboBox1.SelectedIndex = 2;
reader.Close();
if (con.State ==ConnectionState.Open)
con.Close();
}
}
}

BENTALEB MOHAMED

Page 7

OFPPT TDI

TRAVAUX PRATIQUES

TP N 3

Objectif :
Dans cet atelier nous allons utiliser les diffrents Fournisseurs daccs une base de
donnes SqlClient , OLEDB ODBC .
Travail demand :
1.Crer linterface ci-dessous :

2.Ecrire le code pour le Bouton SqlClient qui permet dafficher tous les Employs
(Employees) de la base de donnes Northwind (mode connect).

3. Ecrire le code pour le Bouton ODBC qui permet dafficher toutes les Commandes
(orders) de la base de donnes Northwind (mode connect).

BENTALEB MOHAMED

Page 8

OFPPT TDI

TRAVAUX PRATIQUES

4. Ecrire le code pour le Bouton OLEDB qui permet dafficher tous les
enregistrements de la table OrderDetails de la base de donnes Northwind (mode
connect).

Solution
using
using
using
using

System.Data.SqlClient;
System.Data.Odbc;
System.Data.OleDb;
System.Data.Common;

namespace TP3
{
public partial class Form1 : Form
{
IDbConnection con;//interface
IDbCommand cmd;//interface
IDataReader dr;//interface
public Form1()
{
InitializeComponent();
}
private void SQLCLIENT_Provider(object sender, EventArgs e)
{
con = new SqlConnection("data source= localhost;"
+"database =Northwind;"+
"Trusted_Connection=yes");
cmd = new SqlCommand();
con.Open();
cmd.Connection = con;
cmd.CommandText = "select * from employees";
dr = cmd.ExecuteReader();
DataTable dt = new DataTable();
dt.Load(dr);
this.dataGridView1.DataSource = dt;
}

BENTALEB MOHAMED

Page 9

OFPPT TDI

TRAVAUX PRATIQUES

private void ODBC_Privider(object sender, EventArgs e)


{
con = new OdbcConnection("Driver={SQL Server Native Client 10.0};"
+"Server=localhost;"+
"Trusted_Connection=yes;"+
"Database=northwind");
cmd = new OdbcCommand();
con.Open();
cmd.Connection = con;
cmd.CommandText = "select * from orders";
dr = cmd.ExecuteReader();
DataTable dt = new DataTable();
dt.Load(dr);
this.dataGridView1.DataSource = dt;
}
private void OLEDB_Privider(object sender, EventArgs e)
{//Provider=SQLNCLI10
SQLOLEDB
con = new OleDbConnection("Provider=SQLNCLI10;"
+"Data Source = localhost"
+" ;Integrated Security=SSPI;"
+"Initial Catalog=northwind");
cmd = new OleDbCommand();
con.Open();
cmd.Connection = con;
cmd.CommandText = "select * from OrderDetails";
dr = cmd.ExecuteReader();
DataTable dt = new DataTable();
dt.Load(dr);
this.dataGridView1.DataSource = dt;
}
}
}

BENTALEB MOHAMED

Page 10

OFPPT TDI

TRAVAUX PRATIQUES

TP N 4

Objectif :
Dans cet exercice vous allez utiliser les oprations de mise jours sur une table en
utilisant la mthode de concatnation.
Travail demand :
Soit la base de donne gestionPersonne contenant la table suivante :

1. cration la base de donnes


2. Crer linterface ci-dessous :

3. Ecrire le code pour le Bouton Ajouter qui permet dajouter une nouvelle Personne
( mode connect).
BENTALEB MOHAMED

Page 11

OFPPT TDI

TRAVAUX PRATIQUES

4. Ecrire le code pour le Bouton Modifier qui permet de modifier une Personne en
mode connect.
5. Ecrire le code pour le Bouton Supprimer qui permet de supprimer une Personne
en mode connect.
6. Ecrire le code pour le Bouton Rechercher qui permet de rechercher une Personne
en mode connect.
using System.Data.SqlClient ;
namespace TP4
{
public partial class Form1 : Form
{SqlConnection con = new SqlConnection("Server=(local);Initial Catalog
=gestionPersonne;Integrated Security=true");
SqlCommand cmd = new SqlCommand();
SqlDataReader rd;
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
cmd.CommandType = CommandType.Text;
cmd.Connection = con;
cmd.CommandText = "";
con.Open();
}
private void buttonAjouter_Click(object sender, EventArgs e)
{
cmd.CommandText = "insert into personne values ("
+ this.textBoxCode.Text
+ ",'" + this.textBoxNom.Text
+ "' ,'" + this.textBoxPrenom.Text + "')";
cmd.ExecuteNonQuery();
MessageBox.Show ("insertion russite");
}
private void buttonModifier_Click(object sender, EventArgs e)
{
cmd.CommandText = "update personne set nom='" +
this.textBoxNom.Text +
"',prenom='" + this.textBoxPrenom.Text
+ "'where code=" + this.textBoxCode.Text;
cmd.ExecuteNonQuery();
MessageBox.Show (" modification russite");
}
private void buttonSupprimer_Click(object sender, EventArgs e)
{
cmd.CommandText = "delete from personne where code=" +
this.textBoxCode.Text;
cmd.ExecuteNonQuery();
MessageBox.Show("suppression russite");
}

private void buttonChercher_Click(object sender, EventArgs e)

BENTALEB MOHAMED

Page 12

OFPPT TDI

TRAVAUX PRATIQUES

{
cmd.CommandText = "select * from personne where code ="
+ this.textBoxCode.Text;
rd =
cmd.ExecuteReader();
if (rd.HasRows)
{
rd.Read();
this.textBoxNom.Text = rd["Nom"].ToString ();
this.textBoxPrenom.Text = rd[2].ToString();
}
else
{
MessageBox.Show("Code introuvable");
}
rd.Close();

}
}
}

BENTALEB MOHAMED

Page 13

OFPPT TDI

TRAVAUX PRATIQUES

TP N 5

Objectifs :
Dans cet atelier vous allez utiliser les paramtres de lobjet command a travers sa
collection Parameters .
Travail demand :
1. Crer linterface ci-dessous :

using System.Data.SqlClient;
namespace TP5
{
public partial class Form1 : Form
{
SqlConnection con = new SqlConnection("Server=(local)"+
";Initial Catalog =gestionPersonne;Integrated Security=true" );
SqlCommand cmd = new SqlCommand();
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
cmd.CommandType = CommandType.Text;
cmd.Connection = con;
cmd.CommandText = "";
con.Open();
}

private void createParameters()

BENTALEB MOHAMED

Page 14

OFPPT TDI

TRAVAUX PRATIQUES

{
cmd.Parameters.Clear();
cmd.Parameters.Add("@code",SqlDbType.Int, 4).Value =
this.textBoxCode.Text;
cmd.Parameters.Add("@Nom", SqlDbType.VarChar, 50).Value =
this.textBoxNom.Text;
cmd.Parameters.Add("@Prenom", SqlDbType.VarChar, 50).Value =
this.textBoxPrenom.Text;
}
private void buttonAjouter_Click(object sender, EventArgs e)
{
if (this.buttonAjouter.Text.Equals("Nouveau"))
{
foreach (Control a in Controls)
{
if (a is TextBox)
{
a.Text = "";
}
}
this.buttonAjouter.Text = "Ajouter";
}
else if (this.buttonAjouter.Text.Equals("Ajouter"))
{
createParameters();
cmd.CommandText = "insert into personne values "+
"(@code,@nom,@prenom)";
cmd.ExecuteNonQuery();
MessageBox.Show("insertion russite");
this.buttonAjouter.Text = "Nouveau";
}
}
private void buttonModifier_Click(object sender, EventArgs e)
{
createParameters();
cmd.CommandText = "update personne set nom =@nom"+
", prenom =@prenom where code = @code";
cmd.ExecuteNonQuery();
MessageBox.Show("insertion russite");
}
private void buttonSupprimer_Click(object sender, EventArgs e)
{
createParameters();
cmd.CommandText = "delete personne"+
" where code = @code";
cmd.ExecuteNonQuery();
MessageBox.Show("insertion russite");
}

BENTALEB MOHAMED

Page 15

OFPPT TDI

TRAVAUX PRATIQUES

private void buttonChercher_Click(object sender, EventArgs e)


{
createParameters();
cmd.CommandText = "select * from personne where code = @code";
SqlDataReader rd = cmd.ExecuteReader();
if (rd.HasRows)
{
rd.Read();//une seule ligne
this.textBoxNom.Text = rd["Nom"].ToString();
//je rcupere la valeur du champ nom
// et je le stock dans la czone de texte
MessageBox.Show(rd[0].ToString());
this.textBoxPrenom.Text = rd[2].ToString();
}
else
{
MessageBox.Show("Code introuvable");
}
rd.Close();
}
private void buttonAnnuler_Click(object sender, EventArgs e)
{
if (this.buttonAjouter.Text.Equals("Ajouter"))
{
foreach (Control a in Controls)
{
if (a is TextBox)
{
a.Text = "";
}
}
this.buttonAjouter.Text = "Nouveau";
}
}
}
}

BENTALEB MOHAMED

Page 16

OFPPT TDI

TRAVAUX PRATIQUES

TP N 6

Objectif :
Dans cet exercice vous allez effectuer des oprations de recherche sur une table.
Travail demand :
1. Crer linterface ci-dessous :

Solution :
using System.Data.SqlClient;

BENTALEB MOHAMED

Page 17

OFPPT TDI

TRAVAUX PRATIQUES

namespace TP6
{
public partial class Form1 : Form
{
static
SqlConnection con = new SqlConnection("server=.;database
=northwind;integrated security =sspi");
SqlCommand cmd = new SqlCommand("", con);
SqlDataReader dr ;
DataTable dt = new DataTable();
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
con.Open();
cmd.CommandText = "select * from customers";
dr = cmd.ExecuteReader();
dt.Load(dr);
this.dataGridViewAffiche.DataSource = dt;
this.comboBoxChoix.Items.Add("Tout");
this.comboBoxChoix.Items.Add("Commencent par");
this.comboBoxChoix.Items.Add("Ne Commencent pas par");
this.comboBoxChoix.Items.Add("Se terminent par");
this.comboBoxChoix.Items.Add("Ne Se terminent pas par");
this.comboBoxChoix.Items.Add("Contiennent ");
this.comboBoxChoix.Items.Add("ne Contiennent pas");
this.comboBoxChoix.SelectedIndex = 0;
dr.Close();
}
private void filtrer(){
DataView dv = new DataView(dt);
switch (this.comboBoxChoix.SelectedIndex)
{
case 0: dv.RowFilter = "customerId like '%'";
textBoxCritere.Text = "";
break;
case 1: // begin
dv.RowFilter = "customerId like '" +
(this.textBoxCritere.Text).Trim()+ "%'";
break;
case 2:
// not begin
dv.RowFilter = "customerId not like '" +
(this.textBoxCritere.Text).Trim() + "%'";
break;
case 3 ://se termine
dv.RowFilter = "customerId like '%" +
(this.textBoxCritere.Text).Trim() + "'";
break;
case 4: //Not ends with
dv.RowFilter = "customerId not like '%" +
(this.textBoxCritere.Text).Trim() + "'";
break;
case 5 :// contient
dv.RowFilter = "customerId like '%" +
(this.textBoxCritere.Text) + "%'";
break;
case 6:// ne contient pas
dv.RowFilter = "customerId
not like '%" +
(this.textBoxCritere.Text).Trim() + "%'";

BENTALEB MOHAMED

Page 18

OFPPT TDI

TRAVAUX PRATIQUES
break ;
}
this.dataGridViewAffiche.DataSource = dv;

}
private void buttonChercher_Click(object sender, EventArgs e)
{
filtrer();
}
private void textBoxCritere_TextChanged(object sender, EventArgs e)
{
filtrer();
}
}
}

TP N 7

Objectif :
Remplissage dune liste modifiable.
Remplissage dun objet Datagrid.
BD Northwind.
Travail demand :
1. Crer la base de donnes :

BENTALEB MOHAMED

Page 19

OFPPT TDI

TRAVAUX PRATIQUES

2. Crer un Formulaire MDI Pour votre application

3. Crer linterface suivant ainsi que le code ncessaire pour cette tache :

BENTALEB MOHAMED

Page 20

OFPPT TDI

TRAVAUX PRATIQUES

4. Crer linterface suivant pour la mise jour de la table commande

5. Crer linterface suivant :

Cration dune classe contenant les variables pour notre application


namespace ClientCommandesParam
{
class ClassGestion
{
public static String SqlconStr = @"Server=(local);Initial Catalog
=GestCommandes;Integrated Security=true";
public static SqlConnection con;
public static SqlCommand cmd;
public static SqlDataReader dr;
public static DataTable dt = new DataTable();
public static Form1 fCommandes=null;// = new Form1();
public static Form2 fclient = null;// = new Form2();
public static Form3 fcltCmd = null;// = new Form3();
}
}

BENTALEB MOHAMED

Page 21

OFPPT TDI

TRAVAUX PRATIQUES

Solution Pour le formulaire clients


using System.Data.SqlClient;
namespace ClientCommandesParam
{
public partial class Form1 : Form
{DataTable table = new DataTable();
public Form1()
{
InitializeComponent();
}
private void Ajouter_Click(object sender, EventArgs e)
{
createParametters();
ClassGestion.cmd.CommandText = "insert into commandes values
(@NumCmd,@Code,@DateCom )";
ClassGestion.cmd.ExecuteNonQuery();
MessageBox.Show("bien ajout");
}
private void createParametters(){
ClassGestion.cmd.Parameters.Clear();
ClassGestion.cmd.Parameters.Add("@NumCmd",
SqlDbType.Int, 4)
.Value = TextBox1.Text;
ClassGestion.cmd.Parameters.Add("@Code",
SqlDbType.Int, 4)
.Value = this.ComboBox1.SelectedValue.ToString();
ClassGestion.cmd.Parameters.Add("@DateCom",
SqlDbType.Date).
Value = this.DateTimePicker1.Value.Date;
}
private void Form1_Load(object sender, EventArgs e)
{ClassGestion.con = new SqlConnection(ClassGestion.SqlconStr);
ClassGestion.con.Open();
ClassGestion.cmd = ClassGestion.con.CreateCommand();
ClassGestion.cmd.CommandText = "SELECT [CodeClient] as codeclt ,[Nom]+
' '+[Prenom]as NomPrenom FROM [Client]";
SqlDataReader dr
= ClassGestion.cmd.ExecuteReader();
table.Load(dr);
this.ComboBox1.DataSource = table;
this.ComboBox1.DisplayMember = "NomPrenom";
this.ComboBox1.ValueMember = "codeclt";
dr.Close();
}
private void Modifier_Click(object sender, EventArgs e)
{
createParametters();
ClassGestion.cmd.CommandText = "update commandes set
DateCom=@DateCom,CodeClient= @Code where NumCom =@NumCmd";
ClassGestion.cmd.ExecuteNonQuery();
MessageBox.Show("bien Modifi");
}
private void supprimer_Click(object sender, EventArgs e)
{
DialogResult res = MessageBox.Show("Voulez-vous vraiment supprimer
cette enregistrement ?", "suppression", MessageBoxButtons.YesNo);
if (res == DialogResult.Yes ){
ClassGestion.cmd.CommandText = "delete from commandes where numCom
=@NumCmd";
ClassGestion.cmd.ExecuteNonQuery();

BENTALEB MOHAMED

Page 22

OFPPT TDI

TRAVAUX PRATIQUES
MessageBox.Show("bien supprime");

}
}
}
}

Solution pour le formulaire des commandes


using System.Data.SqlClient;
namespace ClientCommandesParam
{
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
}
private void BtnNouveau_Click(object sender, EventArgs e)
{
foreach (Control a in Controls)
{
if (a is TextBox)
{
a.Text = "";
}
}
this.TextBox1.Focus();
}
private void BtnEnregistrer_Click(object sender, EventArgs e)
{
createParametters();
ClassGestion.cmd.CommandText = @"insert into Client values
(@code,@nom,@prenom,@dateN)";
ClassGestion.cmd.ExecuteNonQuery();
MessageBox.Show("Bien ajout");
display();
}
private void createParametters()
{
ClassGestion.cmd.Parameters.Clear();
ClassGestion.cmd.Parameters.Add("@code", SqlDbType.Int, 4,
"codeclient").Value = TextBox1.Text;
ClassGestion.cmd.Parameters[0].Direction =
ParameterDirection.Input;
ClassGestion.cmd.Parameters.Add("@Nom", SqlDbType.VarChar,
10).Value = TextBox2.Text;
ClassGestion.cmd.Parameters.Add("@Prenom", SqlDbType.VarChar,
20).Value = TextBox3.Text;
ClassGestion.cmd.Parameters.Add("@DateN", SqlDbType.Date).Value =
this.DateTimePicker1.Value.Date;
}
private void display()
{
ClassGestion.dt.Clear();
//ClassGestion.dt.Rows.Clear();
ClassGestion.cmd.CommandText = "select * from client";
ClassGestion.dr = ClassGestion.cmd.ExecuteReader();
ClassGestion.dt.Load(ClassGestion.dr);
this.DataGridView1.DataSource = null;

BENTALEB MOHAMED

Page 23

OFPPT TDI

TRAVAUX PRATIQUES
this.DataGridView1.DataSource = ClassGestion.dt;
ClassGestion.dr.Close();

}
private void Form2_Load(object sender, EventArgs e)
{
ClassGestion.con = new SqlConnection(ClassGestion.SqlconStr);
ClassGestion.con.Open();
ClassGestion.cmd = ClassGestion.con.CreateCommand();
display();
}
private void BtnModifier_Click(object sender, EventArgs e)
{
createParametters();
ClassGestion.cmd.CommandText = @"update client set nom=@nom
,prenom=@prenom, dateNais =@dateN where codeclient= @Code";
ClassGestion.cmd.ExecuteNonQuery();
MessageBox.Show("Bien modifi");
display();
}
private void BtnSupprimer_Click(object sender, EventArgs e)
{
createParametters();
//declaration d'une transaction
SqlTransaction tr = null;
//dbuter une transaction
tr = ClassGestion.con.BeginTransaction();
ClassGestion.cmd.Transaction = tr;
try
{
DialogResult res = MessageBox.Show("Voulez-vous vraiment
supprimer cet enregistrement ?", "suppression", MessageBoxButtons.YesNo);
if (res == DialogResult.Yes)
{
ClassGestion.cmd.CommandText = "delete from Client where
codeClient=@code";
ClassGestion.cmd.ExecuteNonQuery();
tr.Commit();
display();
BtnNouveau_Click(sender, e);
}
else return;
}
catch (Exception)
{
tr.Rollback();
DialogResult response = MessageBox.Show("ce client a pass des
commandes,Confirmer cette suppression ?", "confirmation",
MessageBoxButtons.YesNo, MessageBoxIcon.Information,
MessageBoxDefaultButton.Button2);
if (response == DialogResult.Yes)
{
ClassGestion.cmd.CommandText = "delete from commandes where
codeClient = @code";
ClassGestion.cmd.ExecuteNonQuery();
ClassGestion.cmd.CommandText = "delete from Client where
codeClient=@code";
ClassGestion.cmd.ExecuteNonQuery();

BENTALEB MOHAMED

Page 24

OFPPT TDI

TRAVAUX PRATIQUES
display();
BtnNouveau_Click(sender, e);
}
}

}
private void DataGridView1_Click(object sender, EventArgs e)
{
if( this.DataGridView1.Rows.Count >= 1) {
this.DataGridView1.CurrentRow.Selected = true;
this.TextBox1.Text =
this.DataGridView1.CurrentRow.Cells[0].Value.ToString();
this.TextBox2.Text =
this.DataGridView1.CurrentRow.Cells[1].Value.ToString();
this.TextBox3.Text =
this.DataGridView1.CurrentRow.Cells[2].Value.ToString();
this.DateTimePicker1.Value = (DateTime
)this.DataGridView1.CurrentRow.Cells[3].Value;
}else
return ;
}
private void DataGridView1_CellContentClick(object sender,
DataGridViewCellEventArgs e)
{
}
}
}

Solution pour le formulaire commandes dun client


using System.Data.SqlClient;
namespace ClientCommandesParam
{
public partial class Form3 : Form
{
SqlCommand cmd1;
SqlParameter param = new SqlParameter();
DataTable maTable = new DataTable();
public Form3()
{
InitializeComponent();
}
private void Form3_Load(object sender, EventArgs e)
{
ClassGestion.con = new SqlConnection(ClassGestion.SqlconStr);
ClassGestion.con.Open();
cmd1 = ClassGestion.con.CreateCommand();
cmd1.CommandText = "SELECT CodeClient as codeclt ,Nom+ ' '+Prenom as
NomPrenom FROM Client";
SqlDataReader dr
= cmd1.ExecuteReader();
maTable.Load(dr);
dr.Close();
this.ComboBox1.DataSource = maTable;
this.ComboBox1.DisplayMember = "NomPrenom";
this.ComboBox1.ValueMember = "codeclt";
}

BENTALEB MOHAMED

Page 25

OFPPT TDI

TRAVAUX PRATIQUES

private void ComboBox1_SelectedIndexChanged(object sender, EventArgs e)


{
}
private void ComboBox1_SelectedValueChanged(object sender, EventArgs e)
{
cmd1.Parameters.Clear();
param.Direction = ParameterDirection.Input;
param.ParameterName = "@code";
param.SqlDbType = SqlDbType.Int;
param.Size = 4;
param.Value = this.ComboBox1.SelectedValue;
cmd1.Parameters.Add(param);
DataTable dt = new DataTable();
try
{
cmd1.CommandText = "select * from commandes where
codeclient=@code";
ClassGestion.dr = cmd1.ExecuteReader();
if (ClassGestion.dr.HasRows)
{
dt.Load(ClassGestion.dr);
}
this.DataGridView1.DataSource = dt;
ClassGestion.dr.Close();
}
catch (InvalidCastException)
{
}
}
}
}

Solution pour le formulaire MDI


namespace ClientCommandesParam
{
public partial class MDIParent1 : Form
{
public MDIParent1()
{
InitializeComponent();
}
private void ExitToolsStripMenuItem_Click(object sender, EventArgs e)
{
this.Close();
}
private void toolfclient_Click(object sender, EventArgs e)
{
Boolean trouv =false;
foreach(Form frm1 in this.MdiChildren)
{
if (frm1.Equals(ClassGestion.fclient ))//frm1.GetType is
GetType(ClassGestion.fclient) )
{ frm1.MdiParent = this;
frm1.Activate();
//dans le cas o la fenetre est minimise il faut appel
windowstate

BENTALEB MOHAMED

Page 26

OFPPT TDI

TRAVAUX PRATIQUES
frm1.WindowState = FormWindowState.Normal;
trouv = true;
return ;

}
}
// lorsque le formulaire n'est pas charg en mmoire
if ( trouv==false ){
ClassGestion.fclient = new Form2();
ClassGestion.fclient.MdiParent = this;
ClassGestion.fclient.Show();
}
//ClassGestion.fclient.MdiParent = this;
//ClassGestion.fclient.Show();
}
private void toolfCommandes_Click(object sender, EventArgs e)
{
Boolean trouv = false;
foreach (Form frm1 in this.MdiChildren)
{
if (frm1.Equals(ClassGestion.fCommandes))
{
frm1.MdiParent = this;
frm1.Activate();
//dans le cas o la fenetre est minimise il faut appel
windowstate
frm1.WindowState = FormWindowState.Normal;
trouv = true;
return;
}
}
// lorsque le formulaire n'est pas charg en mmoire
if (!trouv)
{
ClassGestion.fCommandes = new Form1();
ClassGestion.fCommandes.MdiParent = this;
ClassGestion.fCommandes.Show();
}
}
private void toolfcltCmd_Click(object sender, EventArgs e)
{
Boolean trouv = false;
foreach (Form frm1 in this.MdiChildren)
{
if (frm1.Equals(ClassGestion.fcltCmd))
{
frm1.MdiParent = this;
frm1.Activate();
//dans le cas o la fenetre est minimise il faut appel windowstate
frm1.WindowState = FormWindowState.Normal;
trouv = true;
return;
}
}
// lorsque le formulaire n'est pas charg en mmoire
if (!trouv)
{

BENTALEB MOHAMED

Page 27

OFPPT TDI

TRAVAUX PRATIQUES
ClassGestion.fcltCmd = new Form3();
ClassGestion.fcltCmd.MdiParent = this;
ClassGestion.fcltCmd.Show();
}

}
}

TP N 8

Objectif :
Dans cet atelier nous allons utiliser et appeler des procdures stockes
Travail demand :
1. Utiliser la base de donnes cre dans latelier prcdent
Ajouter les procdures stockes suivantes :

CREATE PROCEDURE [dbo].[AfficherTout]


AS
BENTALEB MOHAMED

Page 28

OFPPT TDI
BEGIN
select * from
END

TRAVAUX PRATIQUES
Client

CREATE PROCEDURE [dbo].[Ajouter]


@code int ,
@nom varchar (50),
@prenom varchar(50),
@DateN date
AS
BEGIN
SET NOCOUNT ON;
insert into Client values (@code,@nom,@prenom,@DateN )
END
CREATE PROCEDURE [dbo].[AjouterCmd]
@NumCom int,
@CodeClient int,
@DateCom date
AS
BEGIN
SET NOCOUNT ON;
INSERT INTO Commandes VALUES (@NumCom,@CodeClient,@DateCom)
END
CREATE PROCEDURE [dbo].[Modifier]
@code int
,
@nom varchar (50),
@prenom varchar(50) ,
@DateN date
AS
BEGIN
update Client set nom= @nom, prenom= @prenom , DateNais
= @DateN where codeclient=@code
END

CREATE PROCEDURE [dbo].[ModifierCmd]


@NumCom int,
@CodeClient int,
@DateCom date
BENTALEB MOHAMED

Page 29

OFPPT TDI

TRAVAUX PRATIQUES

AS
BEGIN
UPDATE Commandes SET CodeClient = @CodeClient, DateCom =
@DateCom WHERE (NumCom = @NumCom)
END
CREATE PROCEDURE [dbo].[NbrCmdClt]
@code int
AS
BEGIN
select count(*) from commandes where codeclient =
END

@code

CREATE PROCEDURE [dbo].[Rechercher]


@code int
AS
BEGIN
select * from
Client where codeclient=@code
END
CREATE PROCEDURE [dbo].[sp_CmdByClient]
@CodeClient int
AS
BEGIN
SET NOCOUNT ON;
SELECT NumCom, CodeClient, DateCom FROM
(CodeClient = @CodeClient)
END

Commandes WHERE

CREATE PROCEDURE [dbo].[sp_NomPrenom]


AS
BEGIN
SET NOCOUNT ON;
SELECT [CodeClient] as codeclt ,[Nom]+ ' '+[Prenom]as
NomPrenom FROM [Client]
END
CREATE PROCEDURE [dbo].[SupprcmdClt]
@code int
AS
BEGIN
delete from commandes where codeClient = @code
END

CREATE PROCEDURE [dbo].[Supprimer]


@code int
AS
BEGIN
delete
Client where codeclient=@code
BENTALEB MOHAMED

Page 30

OFPPT TDI

TRAVAUX PRATIQUES

END
CREATE PROCEDURE [dbo].[SupprimerCmd]
@NumCom int
AS
BEGIN
SET NOCOUNT ON;
DELETE FROM Commandes WHERE (NumCom = @NumCom)
END
2. Refaire le mme atelier en utilisant les procdures stockes
Ajouter une nouvelle classe
using System.Data;
using System.Data.SqlClient;
namespace ClientCommandesParam
{
class ClassGestion
{
public static String SqlconStr = @"Server=(local);Initial Catalog
=GestCommandes;Integrated Security=true";
public static SqlConnection con;
public static SqlCommand cmd;
public static SqlDataReader dr;
public static DataTable dt = new DataTable();
public static Form1 fCommandes = new Form1();
public static Form2 fclient = new Form2();
public static Form3 fcltCmd = new Form3();
}
}

Solution gestion des clients

using System.Data.SqlClient;
namespace ClientCommandesParam
{
public partial class Form2 : Form
{

BENTALEB MOHAMED

Page 31

OFPPT TDI

TRAVAUX PRATIQUES

public Form2()
{
InitializeComponent();
}
private void BtnNouveau_Click(object sender, EventArgs e)
{
foreach (Control a in Controls)
{
if (a is TextBox)
{
a.Text = "";
}
}
this.TextBox1.Focus();
}
private void BtnEnregistrer_Click(object sender, EventArgs e)
{
createParametters();
ClassGestion.cmd.CommandText = @"Ajouter";
try
{
ClassGestion.cmd.ExecuteNonQuery();
MessageBox.Show("Bien ajout");
display();
}
catch (SqlException ex)
{
MessageBox.Show(ex.Message );
}
}
private void createParametters()
{
ClassGestion.cmd.Parameters.Clear();
ClassGestion.cmd.Parameters.Add("@code",
SqlDbType.Int, 4, "codeclient").Value = TextBox1.Text;
ClassGestion.cmd.Parameters[0].Direction =
ParameterDirection.Input;
ClassGestion.cmd.Parameters.Add("@Nom",
SqlDbType.VarChar, 10).Value = TextBox2.Text;
ClassGestion.cmd.Parameters.Add("@Prenom",
SqlDbType.VarChar, 20).Value = TextBox3.Text;
ClassGestion.cmd.Parameters.Add("@DateN",
SqlDbType.Date).Value = this.DateTimePicker1.Value.Date;
}

BENTALEB MOHAMED

Page 32

OFPPT TDI

TRAVAUX PRATIQUES

private void display()


{
ClassGestion.dt.Clear();
//ClassGestion.dt.Rows.Clear();
ClassGestion.cmd.Parameters.Clear();
ClassGestion.cmd.CommandText = "AfficherTout";
ClassGestion.dr = ClassGestion.cmd.ExecuteReader();
ClassGestion.dt.Load(ClassGestion.dr);
this.DataGridView1.DataSource = null;
this.DataGridView1.DataSource = ClassGestion.dt;
ClassGestion.dr.Close();
}
private void Form2_Load(object sender, EventArgs e)
{
ClassGestion.con = new SqlConnection(ClassGestion.SqlconStr);
ClassGestion.con.Open();
ClassGestion.cmd = ClassGestion.con.CreateCommand();
ClassGestion.cmd.CommandType = CommandType.StoredProcedure;
display();
}
private void BtnModifier_Click(object sender, EventArgs e)
{
createParametters();
ClassGestion.cmd.CommandText = @"Modifier";
ClassGestion.cmd.ExecuteNonQuery();
MessageBox.Show("Bien modifi");
display();
}

private void BtnSupprimer_Click(object sender, EventArgs e)


{
ClassGestion.cmd.Parameters.Clear();
ClassGestion.cmd.Parameters.Add("@code",
SqlDbType.Int, 4, "codeclient").Value = TextBox1.Text;
//declaration d'une transaction
SqlTransaction tr = null;
//dbuter une transaction
tr = ClassGestion.con.BeginTransaction();
ClassGestion.cmd.Transaction = tr;
try
{
DialogResult res = MessageBox.Show("Voulez-vous vraiment
supprimer cet enregistrement ?", "suppression", MessageBoxButtons.YesNo);
if (res == DialogResult.Yes)
{
ClassGestion.cmd.CommandText = "Supprimer";
ClassGestion.cmd.ExecuteNonQuery();
tr.Commit();
display();
BtnNouveau_Click(sender, e);
}
else return;
}
catch (Exception)
{
tr.Rollback();

BENTALEB MOHAMED

Page 33

OFPPT TDI

TRAVAUX PRATIQUES

DialogResult response = MessageBox.Show("ce client a pass des


commandes,Confirmer cette suppression ?", "confirmation",
MessageBoxButtons.YesNo, MessageBoxIcon.Information,
MessageBoxDefaultButton.Button2);
if (response == DialogResult.Yes)
{
ClassGestion.cmd.CommandText = "SupprcmdClt";
ClassGestion.cmd.ExecuteNonQuery();
ClassGestion.cmd.CommandText = "Supprimer";
ClassGestion.cmd.ExecuteNonQuery();
display();
BtnNouveau_Click(sender, e);
}
}
}

private void DataGridView1_Click(object sender, EventArgs e)


{
if( this.DataGridView1.Rows.Count >= 1) {
this.DataGridView1.CurrentRow.Selected = true;
this.TextBox1.Text = this.DataGridView1.
CurrentRow.Cells[0].Value.ToString();
this.TextBox2.Text = this.DataGridView1.
CurrentRow.Cells[1].Value.ToString();
this.TextBox3.Text = this.DataGridView1.
CurrentRow.Cells[2].Value.ToString();
this.DateTimePicker1.Value = (DateTime )this.DataGridView1.
CurrentRow.Cells[3].Value;
}else
return ;
}
}
}

Solution du formulaire Commandes

using System.Data.SqlClient;
namespace ClientCommandesParam
{
public partial class Form1 : Form
{DataTable table = new DataTable();
public Form1()
{

BENTALEB MOHAMED

Page 34

OFPPT TDI

TRAVAUX PRATIQUES
InitializeComponent();

}
private void Ajouter_Click(object sender, EventArgs e)
{
createParametters();
ClassGestion.cmd.CommandText = "AjouterCmd";
ClassGestion.cmd.ExecuteNonQuery();
MessageBox.Show("bien ajout");
}
private void createParametters(){
ClassGestion.cmd.Parameters.Clear();
ClassGestion.cmd.Parameters.Add("@NumCom", SqlDbType.Int, 4).
Value = this.TextBox1.Text;
ClassGestion.cmd.Parameters.Add("@CodeClient", SqlDbType.Int, 4).
Value = this.ComboBox1.SelectedValue;
ClassGestion.cmd.Parameters.Add("@DateCom", SqlDbType.Date).
Value = this.DateTimePicker1.Value.Date;
}
private void Form1_Load(object sender, EventArgs e)
{ClassGestion.con = new SqlConnection(ClassGestion.SqlconStr);
ClassGestion.con.Open();
ClassGestion.cmd = ClassGestion.con.CreateCommand();
ClassGestion.cmd.CommandType = CommandType.StoredProcedure;
ClassGestion.cmd.CommandText = "sp_NomPrenom";
SqlDataReader dr
= ClassGestion.cmd.ExecuteReader();
table.Load(dr);
this.ComboBox1.DataSource = table;
this.ComboBox1.DisplayMember = "NomPrenom";
this.ComboBox1.ValueMember = "codeclt";
dr.Close();
}
private void Modifier_Click(object sender, EventArgs e)
{
createParametters();
ClassGestion.cmd.CommandText = "ModifierCmd";
ClassGestion.cmd.ExecuteNonQuery();
MessageBox.Show("bien Modifi");
}

private void supprimer_Click(object sender, EventArgs e)


{
DialogResult res = MessageBox.Show("Voulez-vous vraiment supprimer
cette enregistrement ?", "suppression", MessageBoxButtons.YesNo);
if (res == DialogResult.Yes ){
ClassGestion.cmd.Parameters.Clear();
ClassGestion.cmd.Parameters.Add("@NumCom", SqlDbType.Int, 4).
Value = this.TextBox1.Text;
ClassGestion.cmd.CommandText = "SupprimerCmd";
ClassGestion.cmd.ExecuteNonQuery();
MessageBox.Show("bien supprime");
}
}
}
}

Solution pour le formulaire Commandes dun client choisi partir dune liste

BENTALEB MOHAMED

Page 35

OFPPT TDI

TRAVAUX PRATIQUES

using System.Data.SqlClient;
namespace ClientCommandesParam
{
public partial class Form3 : Form
{
SqlCommand cmd1;
SqlParameter param = new SqlParameter();
DataTable maTable = new DataTable();
public Form3()
{
InitializeComponent();
}
private void Form3_Load(object sender, EventArgs e)
{
ClassGestion.con = new SqlConnection(ClassGestion.SqlconStr);
ClassGestion.con.Open();
cmd1 = ClassGestion.con.CreateCommand();
cmd1.CommandType = CommandType.StoredProcedure;
cmd1.CommandText = "sp_NomPrenom";
SqlDataReader dr
= cmd1.ExecuteReader();
maTable.Load(dr);
dr.Close();
this.ComboBox1.DataSource = maTable;
this.ComboBox1.DisplayMember = "NomPrenom";
this.ComboBox1.ValueMember = "codeclt";
}
private void ComboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
cmd1.Parameters.Clear();
param.Direction = ParameterDirection.Input;
param.ParameterName = "@CodeClient";
param.SqlDbType = SqlDbType.Int;
param.Size = 4;
param.Value = this.ComboBox1.SelectedValue;
cmd1.Parameters.Add(param);
DataTable dtgrille = new DataTable();
try
{
cmd1.CommandText = "sp_CmdByClient";
ClassGestion.dr = cmd1.ExecuteReader();
if (ClassGestion.dr.HasRows)

BENTALEB MOHAMED

Page 36

OFPPT TDI

TRAVAUX PRATIQUES
{
dtgrille.Load(ClassGestion.dr);
}
this.DataGridView1.DataSource = dtgrille;
ClassGestion.dr.Close();

}
catch (Exception )
{
}
}
}
}

BENTALEB MOHAMED

Page 37

OFPPT TDI

TRAVAUX PRATIQUES

TP N 9

Objectif :
Dans cet exercice vous allez travailler avec lobjet commnadBuilder pour gnrer les
paramtres laide de la mthode statique DeriveParameters(cmd)
Travail demand :
1. Crer linterface ci-dessous :

Crer la procdure stocke suivante


CREATE PROCEDURE [dbo].[Ajouter]
@code int ,
@nom varchar (50),
@prenom varchar(50),
@DateN date
AS
BEGIN
SET NOCOUNT ON;
insert into Client values (@code,@nom,@prenom,@DateN )
END
using System.Data.SqlClient;
namespace DeriveParameters
{
public partial class Form1 : Form
{
static SqlConnection con = new SqlConnection("Data Source=.;Initial
Catalog=GestCommandes;Integrated Security=True");
SqlCommand cmd = new SqlCommand("ajouter", con);
public Form1()
{
InitializeComponent();

BENTALEB MOHAMED

Page 38

OFPPT TDI

TRAVAUX PRATIQUES

}
private void Form1_Load(object sender, EventArgs e)
{
con.Open();
cmd.CommandType = CommandType.StoredProcedure;
SqlCommandBuilder.DeriveParameters(cmd);

}
private void valeurParam()
{
cmd.Parameters["@code"].Value = this.textBox1.Text;
cmd.Parameters["@nom"].Value = this.textBox2.Text;
cmd.Parameters["@prenom"].Value = this.textBox3.Text;
cmd.Parameters["@DateN"].Value = this.dateTimePicker1.Value;
}
private void btnAjouter_Click(object sender, EventArgs e)
{
cmd.CommandText = "Ajouter";
cmd.Parameters.Clear();
SqlCommandBuilder.DeriveParameters(cmd);
valeurParam();
cmd.ExecuteNonQuery();
}
}
}

BENTALEB MOHAMED

Page 39

OFPPT TDI

TRAVAUX PRATIQUES

TP N 10

Objectif :
Dans cet exercice vous allez travailler avec Les procdures stockes.
Travail demand :
1. Crer linterface ci-dessous :

2. Ecrire le code pour le Bouton Ajouter qui permet dajouter une


nouvelle personne de la table personne (Code, Nom, Prnom) en mode
connect.
3. Ecrire le code pour le Bouton Modifier qui permet de modifier une
personne de la table personne (Code, Nom, Prnom) en mode connect.
4. Ecrire le code pour le Bouton Supprimer qui permet de supprimer
une personne de la table personne (Code, Nom, Prnom) en mode
connect.
5. Ecrire le code pour le Bouton Rechercher qui permet de rechercher
une personne de la table personne (Code, Nom, Prnom) en mode
connect.

BENTALEB MOHAMED

Page 40

OFPPT TDI

BENTALEB MOHAMED

TRAVAUX PRATIQUES

Page 41

OFPPT TDI

TRAVAUX PRATIQUES

TP N 11

Objectif :
Dans cet exercice vous allez travailler dans le mode dconnect
Avec les objet dataset, dataAdaper, CommandBuilder.
Travail demand :
1. Crer linterface ci-dessous :

2. Ecrire le code ncessaires qui permet de remplir le dataGridView avec les


employees de la base de donnes Northwind
using System.Data.SqlClient;
namespace MD_TP1
{
public partial class Form1 : Form
{
DataSet ds = new DataSet();
SqlConnection con = new SqlConnection("Data Source=.;Initial
Catalog=Northwind;Integrated Security=True");
// SqlCommand cmd = new SqlCommand();
SqlDataAdapter da = new SqlDataAdapter() ;
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
da.SelectCommand = new SqlCommand ();
da.SelectCommand.Connection = con;
da.SelectCommand.CommandType = CommandType.Text;
da.SelectCommand.CommandText = "select * from Employees";
da.FillSchema(ds, SchemaType.Source, "Employees");
da.Fill(ds, "employees");
dataGridView1.DataSource = ds.Tables["employees"];

BENTALEB MOHAMED

Page 42

OFPPT TDI

TRAVAUX PRATIQUES

}
}
}

TP N 12

Objectif :
Dans cet exercice vous allez travailler dans le mode dconnect
Avec les objets dataAdapter et DataSet
Travail demand :
1. Crer linterface ci-dessous :

BENTALEB MOHAMED

Page 43

OFPPT TDI

TRAVAUX PRATIQUES

2. Ecrire le code pour le Bouton Ajouter qui permet dajouter un


nouveau Client de la table client (Code, Nom,) en mode dconnect.
3. Ecrire le code pour le Bouton Modifier qui permet de modifier un
client de la table Client (Code, Nom) en mode dconnect.
4. Ecrire le code pour le Bouton Supprimer qui permet de supprimer un
Client de la table Client (Code, Nom) en mode dconnect.
5. Le combobox doit tre remplie par lensemble des codes de tous les
clients.
using System.Data.SqlClient;
namespace MD_TP2
{
public partial class Form1 : Form
{
SqlConnection con = new SqlConnection("Data Source=.;Initial
Catalog=Gclient;Integrated Security=True");
DataSet ds = new DataSet();
SqlDataAdapter da = new SqlDataAdapter();
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
chager();
con.Open();
}
private void buttonAjouter_Click(object sender, EventArgs e)
{
da.InsertCommand = new SqlCommand();
da.InsertCommand.CommandText = "insert into client values(@code, @nom)";
da.InsertCommand.Connection = con;
da.InsertCommand.Parameters.Add(
"@code", SqlDbType.Int, 4, "code").Value = this.comboBox1.Text;
da.InsertCommand.Parameters.Add(
"@nom", SqlDbType.NVarChar, 30, "nom").Value = this.textBoxNom.Text;
da.InsertCommand.ExecuteNonQuery();
chager();
comboBox1_SelectedIndexChanged(sender, e);
}
private void buttonModifier_Click(object sender, EventArgs e)
{
da.UpdateCommand = new SqlCommand();
da.UpdateCommand.CommandText = "update client set nom =@nom where code =@code";
da.UpdateCommand.Connection = con;
da.UpdateCommand.Parameters.Add(
"@code", SqlDbType.Int, 4, "code").Value = this.comboBox1.Text;
da.UpdateCommand.Parameters.Add(
"@nom", SqlDbType.NVarChar, 30, "nom").Value = this.textBoxNom.Text;
da.UpdateCommand.ExecuteNonQuery();
chager();
comboBox1_SelectedIndexChanged(sender, e);
}

BENTALEB MOHAMED

Page 44

OFPPT TDI

TRAVAUX PRATIQUES

private void buttonSupprimer_Click(object sender, EventArgs e)


{
da.DeleteCommand = new SqlCommand();
da.DeleteCommand.CommandText = "delete from client where code =@code";
da.DeleteCommand.Connection = con;
da.DeleteCommand.Parameters.Add("@code", SqlDbType.Int, 4, "code").Value =
this.comboBox1.Text;
da.DeleteCommand.ExecuteNonQuery();
chager();
comboBox1_SelectedIndexChanged(sender, e);
}
private void chager()
{
ds.Clear();
da.SelectCommand = new SqlCommand();
da.SelectCommand.CommandText = "select * from client";
da.SelectCommand.Connection = con;
da.FillSchema(ds, SchemaType.Source, "client");
da.Fill(ds, "client");
comboBox1.DataSource = ds.Tables[0];
comboBox1.DisplayMember = ds.Tables[0].Columns [0].ToString ();
}
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
try
{
DataRow ligne = ds.Tables[0].Rows.Find(this.comboBox1.Text);
if (ligne != null) { this.textBoxNom.Text = ligne[1].ToString(); }
}
catch (Exception)
{ }
}
private void comboBox1_TextChanged(object sender, EventArgs e)
{
textBoxNom.Text = "";
}
}
}

BENTALEB MOHAMED

Page 45

OFPPT TDI

TRAVAUX PRATIQUES

TP N 13

Objectifs :
Dans cet atelier vous allez utiliser les objets du mode dconnect
Dataset dataadapter CommandBuilder pour gnrer insertCommand
,updateCommand et deleteCommand de lobjet dataAdapter partir se
selectCommand.

Travail demand :
1. Crer linterface ci-dessous :

2. Ecrire les instructions ncessaires pour chaque bouton qui figure sur linterface cidessus.
using System.Data.SqlClient;
namespace MD_TP2
{
public partial class Form2 : Form
{
SqlConnection con = new SqlConnection("Data Source=.;Initial
Catalog=Gclient;Integrated Security=True");
int RowNumber=0;
DataSet ds = new DataSet();
SqlDataAdapter da;
SqlCommandBuilder build = new SqlCommandBuilder();
public Form2()
{
InitializeComponent();

BENTALEB MOHAMED

Page 46

OFPPT TDI

TRAVAUX PRATIQUES

}
private void Form2_Load(object sender, EventArgs e)
{
da = new SqlDataAdapter("select * from client", con);
da.FillSchema(ds, SchemaType.Source, "client");
build.DataAdapter = da;
da.Fill(ds, "client");
}
private void buttonPremier_Click(object sender, EventArgs e)
{
RowNumber = 0;
afficher(RowNumber);
}
private void buttonSuivant_Click(object sender, EventArgs e)
try {
RowNumber += 1;// Positioner le curseur dans la position suivante
afficher(RowNumber);
} catch(IndexOutOfRangeException )
{
MessageBox.Show("Vous avez atteint la fin");
RowNumber = ds.Tables["client"].Rows.Count - 1;
}
}
private void buttonPrecedent_Click(object sender, EventArgs e)
{
try
{
RowNumber -= 1;// Positioner le curseur dans la position prcdente
afficher(RowNumber);
}
catch (IndexOutOfRangeException)
{
MessageBox.Show("Vous avez atteint le dbut");
RowNumber = 0;
}
}
private void buttondernier_Click(object sender, EventArgs e)
{RowNumber = ds.Tables["client"].Rows.Count - 1; // Positioner le
curseur dans la fin
afficher(RowNumber);
}
private void buttonAjouter_Click(object sender, EventArgs e)
{
DataRow ligne = ds.Tables[0].Rows.Find(textBoxCode.Text);
if (ligne == null)
{
DataRow nouvelleLigne = ds.Tables[0].NewRow();
nouvelleLigne[0] = this.textBoxCode.Text;
nouvelleLigne[1] = this.textBoxNom.Text;
ds.Tables[0].Rows.Add(nouvelleLigne);
Valider();

BENTALEB MOHAMED

Page 47

OFPPT TDI

TRAVAUX PRATIQUES
}
else
{ MessageBox.Show("client dja existant"); }
}

private void Valider()


{
DataSet changes = ds.GetChanges();
if (changes != null)// il y a des chgt
{
da.Update(changes, "client");
ds.AcceptChanges();
}
}
private void buttonModifier_Click(object sender, EventArgs e)
{
DataRow ligne = ds.Tables[0].Rows.Find(textBoxCode.Text);
if (ligne != null)
{
ligne.BeginEdit();
ligne[0] = this.textBoxCode.Text;
ligne[1] = this.textBoxNom.Text;
ligne.EndEdit ();
Valider();
}
else
{ MessageBox.Show("client inexistant"); }
}
private void buttonSupprimer_Click(object sender, EventArgs e)
{//recherch le client laide de find
DataRow ligne = ds.Tables[0].Rows.Find(textBoxCode.Text);
if (ligne != null)
{
ligne.Delete();
Valider();
}
else
{ MessageBox.Show("client inexistant"); }
}
private void afficher(int i)
{
this.textBoxCode.Text = ds.Tables[0].Rows[i][0].ToString();
this.textBoxNom.Text = ds.Tables[0].Rows[i][1].ToString();
}

}
}

BENTALEB MOHAMED

Page 48

OFPPT TDI

TRAVAUX PRATIQUES

TP N 14

Objectifs :
Dans cet atelier vous allez utiliser les objets du mode dconnect
Dataset dataadapter CommandBuilder pour gnrer insertCommand
,updateCommand et deleteCommand de lobjet dataAdapter partir se
selectCommand.
On optimise lutilisation dune approche de la POO

Travail demand :
1. Crer une classe Client ayant deux attributs Code et Nom
Crer un interface interface IMaj
{
void ajouter( Object obj );
void modifier(Object obj);
void supprimer(Object obj);
Object rechercher(Object obj);
}

2.
3. Crer une Classe ClientDAO qui implmente linterface IMaj et ayant les mthodes
publiques suivantes :
a. public void ajouter(object obj )
b. public void modifier(object obj)
c. public void supprimer(object obj)
d. public object rechercher(object obj)
e.

private void mettreAjour()

f.

public

void initialiser()

g. Dfinir les attributs et les mthodes

qui vous serons utiles pour

accomplir cette tche.

4. Raliser linterface suivant :

BENTALEB MOHAMED

Page 49

OFPPT TDI

TRAVAUX PRATIQUES

Solution propose

La Classe Client
namespace MD_TP2
{
class Client
{
private int code;
private string nom;
public Client(){
}
public Client(int code)
{this.code =code; }
public Client(int code, string nom)
{
this.code = code;
this.nom = nom;
}
public int Code
{
get { return code; }
set { code = value; }
}
public string Nom
{
get { return nom; }
set { nom = value; }
}
public override string ToString()
{
return code.ToString()+ " " + nom;
}
}
}

Linterface IMAJ
namespace MD_TP2
{
interface IMaj
{
void ajouter( Object obj );
void modifier(Object obj);
void supprimer(Object obj);
Object rechercher(Object obj);
}}

BENTALEB MOHAMED

Page 50

OFPPT TDI

TRAVAUX PRATIQUES

La Classe ClientDAO
using System.Data.SqlClient;
using System.Windows.Forms;

namespace MD_TP2
{
class ClientDAO:IMaj
{
private static SqlConnection con = new SqlConnection("Data
Source=.;Initial Catalog=Gclient;Integrated Security=True");
private
DataSet ds = new DataSet();
private
SqlDataAdapter da = new SqlDataAdapter("select * from client",
con);
private
SqlCommandBuilder build = new SqlCommandBuilder();

public

void initialiser()
{
da.FillSchema(ds, SchemaType.Source, "client");
build.DataAdapter = da;
da.Fill(ds, "client");
}

public void ajouter(object obj)


{
Client clt = (Client)obj;
DataRow ligne = ds.Tables[0].Rows.Find(clt.Code);
if (ligne == null)// si non trouv
{
DataRow nouvelleLigne = ds.Tables[0].NewRow();
nouvelleLigne[0] = clt.Code ;
nouvelleLigne[1] = clt.Nom;
ds.Tables[0].Rows.Add(nouvelleLigne);
mettreAjour();
}
}
private void mettreAjour()
{
da.Update(ds, "client");
ds.AcceptChanges();
}
public void modifier(object obj)
{
Client clt = (Client)obj;
DataRow ligne = ds.Tables[0].Rows.Find(clt.Code);
if (ligne != null)
{
ligne.BeginEdit();
ligne[0] = clt.Code ;
ligne[1] = clt.Nom;
ligne.EndEdit();
mettreAjour();
}
else

BENTALEB MOHAMED

Page 51

OFPPT TDI

TRAVAUX PRATIQUES
{ MessageBox.Show("client inexistant"); }

}
public void supprimer(object obj)
{
Client clt = (Client)obj;
DataRow ligne = ds.Tables[0].Rows.Find(clt.Code);
if (ligne != null)
{
ligne.Delete();
mettreAjour();
}
else
{ MessageBox.Show("client inexistant"); }
}
public object rechercher(object obj)
{
Client clt
=(Client) obj;
DataRow datarow
= ds.Tables["client"].Rows.Find(clt.Code);
if( datarow !=null )
{clt.Code = (int)datarow[0];
clt.Nom = datarow[1].ToString();
return clt;
}else
{
MessageBox.Show("n'exsiste pas");
return null;
}
}
}
}

Code pour lIHM


namespace MD_TP2
{
public partial class Form3 : Form
{
ClientDAO clientdao = new ClientDAO();
public Form3()
{
InitializeComponent();
}
private void Form3_Load(object sender, EventArgs e)
{
clientdao.initialiser();
}
private void buttonAjouter_Click(object sender, EventArgs e)
{
Client client = new Client();
client.Code = int.Parse(this.textBoxCode.Text);
client.Nom = this.textBoxNom.Text;
clientdao.ajouter(client);
// clientdao.ajouter(new Client(int.Parse(this.textBoxCode.Text),
this.textBoxNom.Text));
}
private void buttonModifier_Click(object sender, EventArgs e)

BENTALEB MOHAMED

Page 52

OFPPT TDI

TRAVAUX PRATIQUES

{
Client client = new Client();
client.Code = int.Parse(this.textBoxCode.Text);
client.Nom = this.textBoxNom.Text;
clientdao.modifier(client);
}
private void buttonSupprimer_Click(object sender, EventArgs e)
{
clientdao.supprimer(new Client(int.Parse(this.textBoxCode.Text)));
}
private void buttonRechercher_Click(object sender, EventArgs e)
{int cod =int.Parse(this.textBoxCode.Text);
Client client = new Client();
client.Code = cod;
Object obj =clientdao.rechercher(client);
Client clt = (Client)obj;
if (clt !=null )
{
this.textBoxCode.Text = clt.Code.ToString();
this.textBoxNom.Text = clt.Nom;
}
}
}
}

TP N 15

Objectifs :
Dans cet atelier vous allez utiliser les objets du mode dconnect
Dataset dataadapter pour montrer comment travaille selectCommand
insertCommand ,updateCommand et deleteCommand de lobjet dataAdapter .
Travail demand :
1. Raliser linterface suivant :

using System.Data.SqlClient;

BENTALEB MOHAMED

Page 53

OFPPT TDI

TRAVAUX PRATIQUES

namespace MD_TP2
{
public partial class Form4 : Form
{
SqlConnection con = new SqlConnection("Data Source=.;Initial
Catalog=Gclient;Integrated Security=True");
DataSet ds = new DataSet();
SqlDataAdapter da;
public Form4()
{
InitializeComponent();
}
private void Form4_Load(object sender, EventArgs e)
{
da = new SqlDataAdapter("select * from client", con);
da.FillSchema(ds, SchemaType.Source, "client");
da.Fill(ds, "client");
}
private void buttonAjouter_Click(object sender, EventArgs e)
{
DataRow ligne = ds.Tables[0].Rows.Find(textBoxCode.Text);
if (ligne == null)//si non trouv
{
DataRow nouvelleLigne = ds.Tables[0].NewRow();
nouvelleLigne[0] = this.textBoxCode.Text;
nouvelleLigne[1] = this.textBoxNom.Text;
ds.Tables[0].Rows.Add(nouvelleLigne);
insertcommand(da);
mettreAjour();
}
else
{ MessageBox.Show("client dja existant"); }
}
private void buttonModifier_Click(object sender, EventArgs e)
{
DataRow ligne = ds.Tables[0].Rows.Find(textBoxCode.Text);
if (ligne != null)//si trouv
{
ligne.BeginEdit();
ligne[0] = this.textBoxCode.Text;
ligne[1] = this.textBoxNom.Text;
ligne.EndEdit();
updatecommand(da);
mettreAjour();
}
else
{ MessageBox.Show("client inexistant"); }
}

private void buttonSupprimer_Click(object sender, EventArgs e)


{
DataRow ligne = ds.Tables[0].Rows.Find(textBoxCode.Text);

BENTALEB MOHAMED

Page 54

OFPPT TDI

TRAVAUX PRATIQUES
if (ligne != null) // si trouve
{
ligne.Delete();
deletecommand(da);
mettreAjour();
}
else
{ MessageBox.Show("client inexistant"); }

}
private void insertcommand(SqlDataAdapter adapter)
{
adapter.InsertCommand = new SqlCommand();
adapter.InsertCommand.Connection = con;
adapter.InsertCommand.CommandType = CommandType.Text;
adapter.InsertCommand.CommandText = "insert into client
values(@code,@nom)";
adapter.InsertCommand.Parameters.AddWithValue("@code",
this.textBoxCode.Text);
adapter.InsertCommand.Parameters.AddWithValue("@nom",this.textBoxNom.Text );
}
private void updatecommand(SqlDataAdapter adapter)
{
adapter.UpdateCommand = new SqlCommand();
adapter.UpdateCommand.Connection = con;
adapter.UpdateCommand.CommandType = CommandType.Text;
adapter.UpdateCommand.CommandText = "update client set nom =@nom
where code= @code";
adapter.UpdateCommand.Parameters.AddWithValue("@code",
this.textBoxCode.Text);
adapter.UpdateCommand.Parameters.AddWithValue("@nom",
this.textBoxNom.Text);
}
private void deletecommand(SqlDataAdapter adapter)
{
adapter.DeleteCommand = new SqlCommand();
adapter.DeleteCommand.Connection = con;
adapter.DeleteCommand.CommandType = CommandType.Text;
adapter.DeleteCommand.CommandText = "delete client where code=
@code";
adapter.DeleteCommand.Parameters.AddWithValue("@code",
this.textBoxCode.Text);
}
private void mettreAjour()
{
//DataSet changes = ds.GetChanges();
//if (changes != null)
//{
//
da.Update(changes, "client");
//
ds.AcceptChanges();
//}
da.Update(ds, "client");
ds.AcceptChanges();
}
}
}

BENTALEB MOHAMED

Page 55

OFPPT TDI

TRAVAUX PRATIQUES

TP N 16

Objectifs :
Dans cet atelier vous allez utiliser les objets du mode Connect
CommandBuilder.DeriveParameters pour gnrer les parametres contenus dans
une procdure stocke
On optimise lutilisation dune approche de la POO
Travail demand :
1. Crer une classe Client
2. Crer une classe MClientDao
a. public void ajouter(Client clt)
b. public void modifier(Client clt)
c. public void supprimer(Client clt)
d. public Client rechercher(Client clt)
3. Crer linterface suivant

using System.Data.SqlClient;
namespace MD_TP2
{
class MClientDao
{
private SqlConnection con = new SqlConnection("Data Source=.;Initial
Catalog=Gclient;Integrated Security=True");
private SqlCommand cmd = new SqlCommand();
private SqlDataReader dr;

public void ajouter(Client clt)


{
con.Open();
cmd.Connection = con;
cmd.CommandType = System.Data.CommandType.StoredProcedure;

BENTALEB MOHAMED

Page 56

OFPPT TDI

TRAVAUX PRATIQUES
cmd.CommandText = "ajouter";
SqlCommandBuilder.DeriveParameters(cmd);
cmd.Parameters[1].Value = clt.Code;
cmd.Parameters[2].Value = clt.Nom;
cmd.ExecuteNonQuery();
con.Close();

public void modifier(Client clt)


{
con.Open();
cmd.Connection = con;
cmd.CommandType = System.Data.CommandType.StoredProcedure;
cmd.CommandText = "modifier";
SqlCommandBuilder.DeriveParameters(cmd);
cmd.Parameters[1].Value = clt.Code;
cmd.Parameters[2].Value = clt.Nom;
cmd.ExecuteNonQuery();
con.Close();
}
public void supprimer(Client clt)
{
con.Open();
cmd.Connection = con;
cmd.CommandType = System.Data.CommandType.StoredProcedure;
cmd.CommandText = "supprimer";
SqlCommandBuilder.DeriveParameters(cmd);
cmd.Parameters[1].Value = clt.Code;
cmd.ExecuteNonQuery();
con.Close();
}
public Client rechercher(Client clt)
{
Client client = new Client();
con.Open();
cmd.Connection = con;
cmd.CommandType = System.Data.CommandType.StoredProcedure;
cmd.CommandText = "rechercher";
SqlCommandBuilder.DeriveParameters(cmd);
cmd.Parameters[1].Value = clt.Code;
dr= cmd.ExecuteReader();
if (dr.HasRows)
{
dr.Read();
client.Code = int.Parse(dr[0].ToString());
client.Nom = dr[1].ToString();
}
dr.Close();
con.Close();
return client;
}
}}
namespace MD_TP2
{
public partial class Form5 : Form
{

BENTALEB MOHAMED

Page 57

OFPPT TDI

TRAVAUX PRATIQUES

MClientDao gest = new MClientDao();


Client client;
public Form5()
{
InitializeComponent();
}
private void buttonAjouter_Click(object sender, EventArgs e)
{
client = new Client();
client.Code = int.Parse(this.textBoxCode.Text);
client.Nom = textBoxNom.Text;
gest.ajouter(client);
}
private void buttonModifier_Click(object sender, EventArgs e)
{
client = new Client();
client.Code = int.Parse(this.textBoxCode.Text);
client.Nom = textBoxNom.Text;
gest.modifier(client);
}
private void buttonSupprimer_Click(object sender, EventArgs e)
{
client = new Client();
client.Code = int.Parse(this.textBoxCode.Text);
gest.supprimer(client);
}
private void buttonRechercher_Click(object sender, EventArgs e)
{
client = new Client();
client.Code = int.Parse(this.textBoxCode.Text);
client = gest.rechercher(client);
if (client != null)
{
textBoxCode.Text = client.Code.ToString();
textBoxNom.Text = client.Nom;
}
else { MessageBox.Show("client inxistant"); }
}
}
}

TP N 17
BENTALEB MOHAMED

Page 58

OFPPT TDI

TRAVAUX PRATIQUES

Objectifs :
Dans cet atelier vous allez utiliser les objets du System.data.Common
System.Configuration pour lire le fichier App.config
Travail demand :
1. Crer un fichier de configuration
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
</configSections>
<connectionStrings>
<add name="MD_TP2.Properties.Settings.GclientConnectionString"
connectionString="Data Source=.;Initial Catalog=Gclient;Integrated
Security=True"
providerName="System.Data.SqlClient" />
<add name="MD_TP2.Properties.Settings.GclientConnectionString1"
connectionString="Provider=Microsoft.ACE.OLEDB.12.0;Data
Source=Gclient.accdb"
providerName="System.Data.OleDb" />
</connectionStrings>
</configuration>

using System.Data.Common ;
using System.Configuration;
namespace MD_TP2
{
public partial class Form7 : Form
{
static string strcon =

BENTALEB MOHAMED

Page 59

OFPPT TDI

TRAVAUX PRATIQUES

ConfigurationManager.
ConnectionStrings[1].
ConnectionString;
static string provider =
ConfigurationManager.
ConnectionStrings[1].
ProviderName;
private DbProviderFactory dbpf;
public static DbConnection con;
private DataSet ds = new DataSet();
private DbDataAdapter da;
private DbCommandBuilder build;
public Form7()
{
InitializeComponent();
}
private void initialiser()
{
dbpf = DbProviderFactories.GetFactory(provider);
con = dbpf.CreateConnection();
con.ConnectionString = strcon;
da = dbpf.CreateDataAdapter();
da.SelectCommand = dbpf.CreateCommand();
da.SelectCommand.CommandText = "select * from client";
da.SelectCommand.Connection = con;
build = dbpf.CreateCommandBuilder();
da.FillSchema(ds, SchemaType.Source, "Client");
build.DataAdapter = da;
da.Fill(ds, "client");
}
private void Form7_Load(object sender, EventArgs e)
{
initialiser();
}
private void buttonAjouter_Click(object sender, EventArgs e)
{
DataRow ligne = ds.Tables[0].Rows.Find(textBoxCode.Text);
if (ligne == null)
{
DataRow nouvelleLigne = ds.Tables[0].NewRow();
nouvelleLigne[0] = this.textBoxCode.Text;
nouvelleLigne[1] = this.textBoxNom.Text;
ds.Tables[0].Rows.Add(nouvelleLigne);
update();
MessageBox.Show("Bien ajout");
}
else
{ MessageBox.Show("client dja existant"); }
}

private void buttonModifier_Click(object sender, EventArgs e)


{
DataRow ligne = ds.Tables[0].Rows.Find(textBoxCode.Text);
if (ligne != null)
{

BENTALEB MOHAMED

Page 60

OFPPT TDI

TRAVAUX PRATIQUES
ligne.BeginEdit();
ligne[0] = this.textBoxCode.Text;
ligne[1] = this.textBoxNom.Text;
ligne.EndEdit(); update();
MessageBox.Show("Bien Modifi");
}
else
{ MessageBox.Show("client inexistant"); }

private void buttonSupprimer_Click(object sender, EventArgs e)


{
DataRow ligne = ds.Tables[0].Rows.Find(textBoxCode.Text);
if (ligne != null)
{
ligne.Delete(); update();
MessageBox.Show("Bien supprim");
}
else
{ MessageBox.Show("client inexistant"); }
}
private void afficher(int i)
{
this.textBoxCode.Text = ds.Tables[0].Rows[i][0].ToString();
this.textBoxNom.Text = ds.Tables[0].Rows[i][1].ToString();
}
private void update()
{
DataSet changes = ds.GetChanges();
if (changes != null)// il y a des chgt
{
da.Update(changes, "client");
ds.AcceptChanges();
}
}
}
}

TP N 18

BENTALEB MOHAMED

Page 61

OFPPT TDI

TRAVAUX PRATIQUES

Objectifs :
Dans cet atelier vous allez utiliser correctement un dataView
Travail demand :

using System.Data.SqlClient;
namespace MD_TP4
{
public partial class Form1 : Form
{
DataSet ds = new DataSet();
SqlConnectionStringBuilder strcon = new SqlConnectionStringBuilder();
SqlConnection con = new SqlConnection("");
SqlDataAdapter da = new SqlDataAdapter();
SqlDataAdapter daOrders = new SqlDataAdapter();
public Form1()
{
InitializeComponent();
strcon.DataSource = "localhost";
strcon.InitialCatalog = "Northwind";
strcon.IntegratedSecurity = true;
con.ConnectionString = strcon.ToString();
da.SelectCommand = new SqlCommand();
da.SelectCommand.CommandText = "select * from customers";
da.SelectCommand.Connection = con;
da.FillSchema(ds, SchemaType.Source, "Customers");
da.Fill(ds, "Customers");
daOrders.SelectCommand = new SqlCommand();
daOrders.SelectCommand.CommandText = "select * from Orders";
daOrders.SelectCommand.Connection = con;
daOrders.FillSchema(ds, SchemaType.Source, "Orders");
daOrders.Fill(ds, "Orders");
}
private void Form1_Load(object sender, EventArgs e)
{
comboBoxCustomers.DataSource = ds.Tables ["Customers"];
comboBoxCustomers.DisplayMember = "CompanyName";
comboBoxCustomers.ValueMember = "CustomerID";
}

BENTALEB MOHAMED

Page 62

OFPPT TDI

TRAVAUX PRATIQUES

private void comboBoxCustomers_SelectedValueChanged(object sender, EventArgs e)


{DataView dv = new DataView(ds.Tables["orders"]);
dv.RowFilter = "customerId ='" +
comboBoxCustomers.SelectedValue.ToString() + "'";
dataGridViewOrders.DataSource = dv;
}
}
}

TP N 19

Objectifs :
Dans cet atelier vous allez ajouter une colonne combobox lie un champ
Travail demand :

using System.Data.SqlClient;
namespace TP9
{
public partial class Form1 : Form
{private static SqlConnection con = new SqlConnection
("Data Source=.;Initial Catalog=Northwind;Integrated Security=True" );
DataSet ds = new DataSet();
SqlDataAdapter daOrders = new SqlDataAdapter("select * from orders",con);
SqlDataAdapter daCustomers = new SqlDataAdapter("select CustomerId,
CompanyName from customers", con);
public Form1()
{
InitializeComponent();
}

BENTALEB MOHAMED

Page 63

OFPPT TDI

TRAVAUX PRATIQUES

private void Form1_Load(object sender, EventArgs e)


{
DataGridViewComboBoxColumn ComboCustomer = new
DataGridViewComboBoxColumn();
ComboCustomer.HeaderText = "Nom du Client";
ComboCustomer.DisplayStyle = DataGridViewComboBoxDisplayStyle.ComboBox;
ComboCustomer.DisplayStyleForCurrentCellOnly = true;
daOrders.Fill(ds,"orders");
daCustomers.Fill(ds, "customers");
ComboCustomer.DataSource = ds.Tables[1];
this.DataGridView1.DataSource = ds.Tables[0];
ComboCustomer.DisplayMember = ds.Tables[1].Columns[1].ToString();
ComboCustomer.ValueMember = ds.Tables[1].Columns[0].ToString();
//Cet ligne lie une colonne du DataSource du DataGridView avec
//la DataSource du DataGridViewComboBoxColumn, donc ValueMember doit
//obligatoirement avoir le mme type de donne que DataPropertyName
ComboCustomer.DataPropertyName = ds.Tables[0].Columns[1].ToString();
this.DataGridView1.Columns["CustomerID"].Visible = false;
//On ajoute nos colonnes au DataGridView
this.DataGridView1.Columns.Add(ComboCustomer);
this.DataGridView1.Columns[ComboCustomer.Name].DisplayIndex = 2;
}
}
}

TP N 20

Objectifs :
Dans cet atelier vous allez effectuer des mises jour sur un dataGridView
Travail demand :

BENTALEB MOHAMED

Page 64

OFPPT TDI

TRAVAUX PRATIQUES

using System.Data.SqlClient;
namespace TP10
{
public partial class Form1 : Form
{static String connectionString = "Data Source=.;Initial
Catalog=Gestionpersonne;Integrated Security=True";
static String sql = "SELECT * FROM Personne";
SqlConnection con = new SqlConnection(connectionString);
SqlCommand cmd ;
SqlDataAdapter da ;
SqlCommandBuilder Builder ;
DataSet ds = new DataSet();
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
cmd = new SqlCommand(sql, con);
da = new SqlDataAdapter(cmd);
Builder = new SqlCommandBuilder(da);
da.Fill(ds, "Personne");
dataGridView1.DataSource = ds.Tables["Personne"];
dataGridView1.ReadOnly = true;
this.btnEnregistrer.Enabled = false;
dataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
}

private void btnAddEdit_Click(object sender, EventArgs e)

BENTALEB MOHAMED

Page 65

OFPPT TDI

TRAVAUX PRATIQUES

{
this.dataGridView1.ReadOnly = false;//possibilit d'criture
this.btnEnregistrer.Enabled = true;
this.btnAddEdit.Enabled = false;
this.btnSupprimer.Enabled = false;
}
private void btnSupprimer_Click(object sender, EventArgs e)
{
//if (MessageBox.Show("Do you want to delete this row ?", "Delete",
MessageBoxButtons.YesNo) == DialogResult.Yes)
//{
//
dataGridView1.Rows.RemoveAt(dataGridView1.SelectedRows[0].Index);
//
da.Update(ds.Tables["Personne"]);
//}
//if( ! dataGridView1.CurrentRow.IsNewRow )
//{
//
dataGridView1.Rows.Remove(dataGridView1.CurrentRow);
//
da.Update(ds.Tables["Personne"]);
//}
foreach( DataGridViewRow row
in dataGridView1.SelectedRows)
{
dataGridView1.Rows.Remove(row);
}
// da.Update(ds.Tables["Personne"]);
}
private void btnEnregistrer_Click(object sender, EventArgs e)
{
da.Update(ds.Tables["Personne"]);
dataGridView1.ReadOnly = true;
btnEnregistrer.Enabled = false;
btnAddEdit.Enabled = true;
btnSupprimer.Enabled = true;
}
private void dataGridView1_UserDeletingRow(object sender,
DataGridViewRowCancelEventArgs e)
{
if (! e.Row.IsNewRow)
{ DialogResult response =
MessageBox.Show(
"Etes vous sure de vouloir supprimer cette ligne?",
"Suppression de ligne?",
MessageBoxButtons.YesNo,
MessageBoxIcon.Question,
MessageBoxDefaultButton.Button2);
if (response == DialogResult.No) {
e.Cancel = true;}
else
{dataGridView1.Rows.Remove(dataGridView1.CurrentRow);}
}
}

BENTALEB MOHAMED

Page 66

OFPPT TDI

TRAVAUX PRATIQUES

TP N 21

Objectifs :
Dans cet atelier vous allez effectuer une suppression multiple de plusieurs
enregistrements sur un dataGridView
Ajouter une colonne checkBox pour effectuer cette suppression
Travail demand :

using System.Data.SqlClient ;
namespace TP8
{
public partial class Form1 : Form
{SqlConnection con = new SqlConnection("Server=(local);Initial
Catalog=Gestionpersonne; Integrated Security=true");
DataSet ds = new DataSet();
SqlDataAdapter da ;
SqlCommandBuilder builder = new SqlCommandBuilder();
DataGridViewCheckBoxColumn check = new DataGridViewCheckBoxColumn();
public Form1()
{

BENTALEB MOHAMED

Page 67

OFPPT TDI

TRAVAUX PRATIQUES
InitializeComponent();

}
private void supprimer_Click(object sender, EventArgs e)
{
for(int i = this.DataGridView1.Rows.Count - 1 ; i>=0 ;i--){
//si la case cocher est true
if ( Convert.ToBoolean( DataGridView1.Rows[i].Cells[3].Value ))
{ Object rech
= DataGridView1.Rows[i].Cells[0].Value;
DataRow row
= ds.Tables[0].Rows.Find(rech);
row.Delete();
}
}
da.Update(ds.Tables[0]);
ds.Tables[0].AcceptChanges();
}
private void Form1_Load(object sender, EventArgs e)
{da = new SqlDataAdapter();
da.SelectCommand = con.CreateCommand();
da.SelectCommand.CommandText = "select * from personne";
da.FillSchema(ds, SchemaType.Mapped, "personne");
da.Fill(ds, "personne");
this.DataGridView1.DataSource = ds;
DataGridView1.DataMember = ds.Tables["personne"].ToString();
builder.DataAdapter = da;
check.HeaderText = "Action";
this.DataGridView1.Columns.Add(check);
}
}
}

TP N 22

Objectifs :
Dans cet atelier vous allez apprendre utiliser correctement les liaisons de donnes
(databinding)
Travail demand :

BENTALEB MOHAMED

Page 68

OFPPT TDI

TRAVAUX PRATIQUES

using System.Data.Common;
namespace bindings
{
public partial class Form2 : Form
{
DbConnection con;
DbConnectionStringBuilder cns;
DbProviderFactory dbf;
DbDataAdapter da;
DataTable dt = new DataTable();
DataSet ds = new DataSet();
BindingManagerBase bm;
DbCommandBuilder build;
public Form2()
{
InitializeComponent();
}
private void Form2_Load(object sender, EventArgs e)
{
dbf = DbProviderFactories.GetFactory("System.Data.SqlClient");
cns = new DbConnectionStringBuilder();
cns.Add("SERVER", ".");
cns.Add("DATABASE", "Gclient");
cns.Add("Integrated Security", "true");
try
{
con = dbf.CreateConnection();
con.ConnectionString = cns.ConnectionString;
da = dbf.CreateDataAdapter();
}
catch (Exception ex)
{
MessageBox.Show("Erreur");
}
build = dbf.CreateCommandBuilder();
da.SelectCommand = dbf.CreateCommand();
da.SelectCommand.Connection = con;
da.SelectCommand.CommandText = "SELECT * FROM Client";
da.SelectCommand.CommandType = CommandType.Text;
build.DataAdapter = da;
da.FillSchema(ds,SchemaType.Source,"Client");
da.Fill(ds, "Client");

BENTALEB MOHAMED

Page 69

OFPPT TDI

TRAVAUX PRATIQUES
dt = ds.Tables["Client"];
bm = this.BindingContext[dt];
this.codeTextBox.DataBindings.Add(new Binding("Text", dt, "Code"));
this.nomTextBox.DataBindings.Add(new Binding("Text", dt, "Nom"));

}
private void cmdPremier_Click(object sender, EventArgs e)
{
bm.Position = 0;
}
private void cmdPrecedent_Click(object sender, EventArgs e)
{
bm.Position -= 1;
}
private void cmdSuivant_Click(object sender, EventArgs e)
{
bm.Position += 1;
}
private void cmdDernier_Click(object sender, EventArgs e)
{
bm.Position = bm.Count -1;
}
private void cmdAjouter_Click(object sender, EventArgs e)
{
bm.AddNew();
}
private void cmdEnregistrer_Click(object sender, EventArgs e)
{
bm.EndCurrentEdit();
da.Update(ds, "client");
}
private void cmdSupprimer_Click(object sender, EventArgs e)
{
bm.RemoveAt(bm.Position);
da.Update(ds, "client");
}
}
}

TP N 23
BENTALEB MOHAMED

Page 70

OFPPT TDI

TRAVAUX PRATIQUES

Objectifs :
Dans cet atelier vous allez apprendre utiliser correctement les liaisons de donnes
(databinding)
Utiliser un dataset typ
Travail demand :
Crer la base de donnes

Cration dun dataSet Typ


Menu dataAdd new data source

Cliquer sur le bouton suivant

BENTALEB MOHAMED

Page 71

OFPPT TDI

TRAVAUX PRATIQUES

Cliquer sur le bouton suivant

Choisir nouvelle connection

Cliquer sur suivant

BENTALEB MOHAMED

Page 72

OFPPT TDI

TRAVAUX PRATIQUES

Crer le formulaire suivant :


BENTALEB MOHAMED

Page 73

OFPPT TDI

TRAVAUX PRATIQUES

using System.Data.SqlClient;
using System.IO;
namespace DATABindings
{
public partial class Form1 : Form
{static SqlConnection con = new SqlConnection("Data Source=.;Initial
Catalog=GestPersonnel;Integrated Security=True");
MyDataSet ds = new MyDataSet();
static SqlDataAdapter da = new SqlDataAdapter("select * from personnels",
con);
SqlCommandBuilder build = new SqlCommandBuilder(da);
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{this.CmbSF.Items.AddRange(new string[] {"Clibataire", "Mari",
"Divorc", "Veuf"});
this.CmbSF.SelectedIndex = 0;
da.Fill(ds.Personnels);
da.FillSchema(ds, SchemaType.Mapped, ds.Personnels.ToString());
this.TxtMatricule.DataBindings.Add("text",
ds.Personnels, ds.Personnels.MatriculeColumn.ToString(), true);
this.TxtNom.DataBindings.Add("text",
ds.Personnels, ds.Personnels.NomColumn.ToString(), true);
this.Txtprenom.DataBindings.Add("text",
ds.Personnels, ds.Personnels.PrenomColumn.ToString(), true);
this.DTPNais.DataBindings.Add("value",
ds.Personnels, ds.Personnels.dateNaissColumn.ToString(), true);
this.DTPEmbauche.DataBindings.Add("value",
ds.Personnels, ds.Personnels.DateEmbaucheColumn.ToString(), true);
this.CmbSF.DataBindings.Add("SelectedItem",

BENTALEB MOHAMED

Page 74

OFPPT TDI

TRAVAUX PRATIQUES
ds.Personnels, ds.Personnels.situationFamilialeColumn.ToString(),

true);
this.ChkAssurance.DataBindings.Add("CheckState",
ds.Personnels, ds.Personnels.AssuranceColumn.ToString(), true);
}
private void Nouveau_Click(object sender, EventArgs e)
{
this.BindingContext[ds.Personnels].AddNew();
}
private void MettreAjour_Click(object sender, EventArgs e)
{
this.BindingContext[ds.Personnels].EndCurrentEdit();
da.Update(ds.Personnels.GetChanges());
ds.AcceptChanges();
}
private void Supprimer_Click(object sender, EventArgs e)
{
this.BindingContext[ds.Personnels].RemoveAt(
this.BindingContext[ds.Personnels].Position);
da.Update(ds.Personnels.GetChanges(DataRowState.Deleted));
ds.AcceptChanges();
}
private void cmdPremier_Click(object sender, EventArgs e)
{
this.BindingContext[ds.Personnels].Position = 0;
}
private void BtnSuivant_Click(object sender, EventArgs e)
{
this.BindingContext[ds.Personnels].Position +=1;
}
private void BtnPrecedent_Click(object sender, EventArgs e)
{
this.BindingContext[ds.Personnels].Position -= 1;
}
private void BtnDernier_Click(object sender, EventArgs e)
{
this.BindingContext[ds.Personnels].Position =
ds.Personnels.Rows.Count - 1;
}
private void writeXml_Click(object sender, EventArgs e)
{
if(File.Exists(Application.StartupPath+"\\"+"fichier.xml"))
{
File.Delete(Application.StartupPath + "\\" + "fichier.xml");
}
ds.WriteXml(Application.StartupPath + "\\" + "fichier.xml");
}

private void ReadXml_Click(object sender, EventArgs e)


{

BENTALEB MOHAMED

Page 75

OFPPT TDI

TRAVAUX PRATIQUES

DataSet dsx = new DataSet();


dsx.ReadXml(Application.StartupPath + "\\" + "fichier.xml",
XmlReadMode.Auto);
this.DataGridView1.DataSource = dsx.Tables[0];
}
}
}

BENTALEB MOHAMED

Page 76

OFPPT TDI

TRAVAUX PRATIQUES

TP N 24

Objectifs :
Dans cet atelier vous allez apprendre utiliser correctement les liaisons de donnes
(databinding) et BindingManager
Utiliser un dataset Non typ

using System.Data.SqlClient;
using System.IO;
namespace databinGC
{
public partial class Form1 : Form
{
SqlConnection con = new SqlConnection();
SqlDataAdapter da = new SqlDataAdapter();
SqlCommandBuilder build = new SqlCommandBuilder();
DataSet ds = new DataSet();
BindingManagerBase mb;

BENTALEB MOHAMED

Page 77

OFPPT TDI

TRAVAUX PRATIQUES

public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
string str = Properties.Settings.Default.constr;
con.ConnectionString = str;
da.SelectCommand = con.CreateCommand();
da.SelectCommand.CommandText = "select * from Personnels";
build.DataAdapter = da;
da.FillSchema(ds, SchemaType.Source, "Personnels");
da.Fill(ds, "Personnels");
mb = this.BindingContext[ds.Tables[0]];
this.CmbSF.Items.AddRange(
new string[] { "Clibataire", "Mari", "Divorc", "Veuf" });
this.CmbSF.SelectedIndex = 0;
this.TxtMatricule.DataBindings.Add("text",
ds.Tables[0], ds.Tables[0].Columns[0].ToString(),true);
this.TxtNom.DataBindings.Add("text",
ds.Tables[0], "Nom",true);
this.Txtprenom.DataBindings.Add("text",
ds.Tables[0], "Prenom",true);
this.DTPNais.DataBindings.Add("value",
ds.Tables[0], "dateNaiss",true);
this.DTPEmbauche.DataBindings.Add("value",
ds.Tables[0], "DateEmbauche",true);
this.CmbSF.DataBindings.Add("SelectedItem",
ds.Tables[0], "situationFamiliale",true);
this.ChkAssurance.DataBindings.Add("Checkstate",
ds.Tables[0], "Assurance",true );
}
private void cmdPremier_Click(object sender, EventArgs e)
{
mb.Position = 0;
}
private void BtnSuivant_Click(object sender, EventArgs e)
{
mb.Position += 1;
}
private void BtnPrecedent_Click(object sender, EventArgs e)
{
mb.Position -= 1;
}
private void BtnDernier_Click(object sender, EventArgs e)
{
mb.Position = ds.Tables[0].Rows.Count - 1;
}
private void Nouveau_Click(object sender, EventArgs e)
{
mb.AddNew();
}
private void Enregistrer_Click(object sender, EventArgs e)

BENTALEB MOHAMED

Page 78

OFPPT TDI

TRAVAUX PRATIQUES

{
mb.EndCurrentEdit();
da.Update(ds.Tables[0].GetChanges(DataRowState.Added));
ds.AcceptChanges();
}
private void Supprimer_Click(object sender, EventArgs e)
{
int currentPostion = mb.Position;
mb.RemoveAt(currentPostion);
da.Update(ds.Tables[0].GetChanges(DataRowState.Deleted));
ds.AcceptChanges();
}
private void Modifier_Click(object sender, EventArgs e)
{
mb.EndCurrentEdit();
da.Update(ds.Tables[0].GetChanges(DataRowState.Modified));
ds.AcceptChanges();
}
private void Writexml_Click(object sender, EventArgs e)
{
if(File.Exists(Application.StartupPath + @"\" + "fichier.xml"))
{
File.Delete(Application.StartupPath + @"\" + "fichier.xml");
}
ds.WriteXml(Application.StartupPath + @"\" + "fichier.xml");
}
private void readXml_Click(object sender, EventArgs e)
{
DataSet dsx = new DataSet();
dsx.ReadXml(Application.StartupPath + @"\" + "fichier.xml",
XmlReadMode.Auto);
this.DataGridView1.DataSource = dsx.Tables[0];
}
}
}

TP N 25

Objectifs :
Dans cet atelier vous allez apprendre utiliser correctement un DataView
Cration dune relation entre deux tables etexploitation de cette relation pour extraire
des donnes

BENTALEB MOHAMED

Page 79

OFPPT TDI

TRAVAUX PRATIQUES

using System.Data.SqlClient;
namespace DataRelationEssai
{
public partial class Form1 : Form
{
static string chaine = Properties.Settings.Default.strCon;
static
SqlConnection con = new SqlConnection(chaine);
SqlDataAdapter daCustomers = new SqlDataAdapter("select * from
customers", con);
SqlDataAdapter daOrders = new SqlDataAdapter("select * from Orders",
con);
//SqlDataAdapter da = new SqlDataAdapter("SELECT CustomerID, CompanyName
FROM Customers;" + "SELECT CustomerID, OrderID FROM Orders;", con);
DataSet ds = new DataSet();
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
daCustomers.FillSchema(ds, SchemaType.Source, "Customers");
daOrders.FillSchema(ds, SchemaType.Source, "Orders");
daOrders.Fill(ds,"Orders");
daCustomers.Fill(ds,"Customers");
DataColumn parent = ds.Tables["Customers"].Columns["customerid"];
DataColumn enfant = ds.Tables["Orders"].Columns["customerid"];
DataRelation relation = new DataRelation("customer_order", parent, enfant);
ds.Relations.Add(relation);
this.comboBox1.DataSource = ds.Tables["customers"];
this.comboBox1.DisplayMember = "CompanyName";
this.comboBox1.ValueMember = "customerid";
//da.Fill(ds);
}

private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)

BENTALEB MOHAMED

Page 80

OFPPT TDI

TRAVAUX PRATIQUES

{
DataView dv = new DataView(ds.Tables["Customers"]);
DataRowView ligne = dv[this.comboBox1.SelectedIndex];
DataView resultat = ligne.CreateChildView("customer_order");
this.dataGridView1.DataSource = resultat;
}
}
}

Autre solution
using System.Data.SqlClient;
namespace DataRelationEssai
{
public partial class Form3 : Form
{
static string chaine = Properties.Settings.Default.strCon;
static SqlConnection con = new SqlConnection(chaine);
SqlDataAdapter daCustomers = new SqlDataAdapter("select * from
customers", con);
SqlDataAdapter daOrders = new SqlDataAdapter("select * from Orders",
con);
DataSet ds = new DataSet();
public Form3()
{
InitializeComponent();
}
private void Form3_Load(object sender, EventArgs e)
{
daCustomers.FillSchema(ds, SchemaType.Source, "Customers");
daOrders.FillSchema(ds, SchemaType.Source, "Orders");
daOrders.Fill(ds, "Orders");
daCustomers.Fill(ds, "Customers");
this.comboBox1.DataSource = ds.Tables["customers"];
this.comboBox1.DisplayMember = "CompanyName";
this.comboBox1.ValueMember = "customerid";
}
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
DataView dv = new DataView();
dv.Table = ds.Tables["orders"];
dv.RowFilter = "customerId ='" + comboBox1.SelectedValue.ToString () + "'";
dataGridView1.DataSource = dv;
}
}
}

BENTALEB MOHAMED

Page 81

OFPPT TDI

TRAVAUX PRATIQUES

TP N 26

Objectifs :
Dans cet atelier vous allez apprendre utiliser correctement un DataView
Cration dune relation entre deux tables etexploitation de cette relation pour extraire
des donnes

using System.Data.SqlClient;
namespace DataRelationEssai
{
public partial class Form2 : Form
{
static string chaine = Properties.Settings.Default.strCon;
static SqlConnection con = new SqlConnection(chaine);
SqlDataAdapter daCustomers = new SqlDataAdapter("select * from
customers", con);

BENTALEB MOHAMED

Page 82

OFPPT TDI

TRAVAUX PRATIQUES

SqlDataAdapter daOrders = new SqlDataAdapter("select * from Orders",


con);
SqlDataAdapter daOrdersDetails = new SqlDataAdapter("select * from
OrderDetails", con);
DataSet ds = new DataSet();
public Form2()
{
InitializeComponent();
}
private void Form2_Load(object sender, EventArgs e)
{
daCustomers.FillSchema(ds, SchemaType.Source, "Customers");
daOrders.FillSchema(ds, SchemaType.Source, "Orders");
daOrdersDetails.FillSchema(ds, SchemaType.Source, "OrderDetails");
daOrders.Fill(ds, "Orders");
daCustomers.Fill(ds, "Customers");
daOrdersDetails.Fill(ds, "OrderDetails");
DataColumn parent = ds.Tables["Customers"].Columns["customerid"];
DataColumn enfant = ds.Tables["Orders"].Columns["customerid"];
DataRelation relation = new DataRelation("customer_order", parent, enfant);
ds.Relations.Add(relation);
parent = ds.Tables["Orders"].Columns["OrderID"];
enfant = ds.Tables["OrderDetails"].Columns["OrderID"];
relation = new DataRelation("Order_orderDetail", parent, enfant);
ds.Relations.Add(relation);
dataGridViewCustomers.DataSource = ds.Tables["Customers"];
}
private void dataGridViewCustomers_Click(object sender, EventArgs e)
{
dataGridViewOrderDetails.DataSource = null;
DataView dv = new DataView(ds.Tables[0]);
DataRowView ligne
= dv[dataGridViewCustomers.CurrentRow.Index ];
dataGridViewOrders.DataSource = ligne.CreateChildView("customer_order");
}
private void dataGridViewOrders_Click(object sender, EventArgs e)
{
//DataView dv
= (DataView)dataGridViewOrders.DataSource;
DataView dv = new DataView(ds.Tables[1]);
DataRowView ligne
= dv[dataGridViewOrders.CurrentRow.Index ];
dataGridViewOrderDetails.DataSource =
ligne.CreateChildView("Order_orderDetail");
}
}
}

BENTALEB MOHAMED

Page 83

OFPPT TDI

TRAVAUX PRATIQUES

TP N 27

Objectifs :
Dans cet atelier vous allez apprendre utiliser correctement DisplayMember et
ValueMember et SelectedValue dun comboBox

using System.Data.SqlClient;
namespace les_clients_Meme_pays
{
public partial class Form1 : Form
{
string chaine = Properties.Settings.Default.constr;
string a = Properties.Settings.Default.Machaine;
SqlConnection con =new SqlConnection ();
SqlDataAdapter daCombo;
DataSet ds = new DataSet();
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
con.ConnectionString = chaine;
daCombo = new SqlDataAdapter(
"select customerId ,country,CompanyName +' '+ContactName +'
'+ country as Disp from Customers", con);
daCombo.Fill(ds, "coustomers");
comboBox1.DisplayMember = "Disp";
comboBox1.ValueMember = "CustomerID";
comboBox1.DataSource = ds.Tables["coustomers"];

//dataGridView1.DataSource = ds;

BENTALEB MOHAMED

Page 84

OFPPT TDI

TRAVAUX PRATIQUES
//dataGridView1.DataMember = ds.Tables["coustomers"].ToString();

}
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
DataSet ds1 = new DataSet();
SqlDataAdapter daCritere = new SqlDataAdapter();
daCritere.SelectCommand = new SqlCommand (
"select CustomerID , Country from Customers where Country=
(select country from customers where customerid like '" +
comboBox1.SelectedValue + "')", con);
daCritere.Fill(ds1,"resultats");
dataGridView1.DataSource = ds1;
dataGridView1.DataMember = ds1.Tables["resultats"].ToString();
}
}
}

TP N 28

Objectifs :
Dans cet atelier vous allez apprendre utiliser correctement DisplayMember et
ValueMember et SelectedValue dun comboBox

using System.Data.SqlClient;
namespace LiaisonCombobox
{
public partial class Form1 : Form
{

BENTALEB MOHAMED

Page 85

OFPPT TDI

TRAVAUX PRATIQUES

String SqlconStr = @"Server=(local);Initial Catalog


=GestCommandes;Integrated Security=true";
DataTable dt = new DataTable();
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
try
{
using (SqlConnection con = new SqlConnection(SqlconStr))
{
con.Open();
using (SqlCommand cmd = new SqlCommand())
{
cmd.Connection = con;
cmd.CommandText = "SELECT [CodeClient] as codeclt
,[Nom]+ ' '+[Prenom]as NomPrenom FROM [Client]";
using (SqlDataReader dr = cmd.ExecuteReader())
dt.Load(dr);
}
this.ComboBox1.DataSource = dt;
this.ComboBox1.DisplayMember = "NomPrenom";
this.ComboBox1.ValueMember = "codeclt";
}
}
catch (SqlException ex) { MessageBox.Show(ex.Message); }
}

private void ComboBox1_SelectedIndexChanged(object sender, EventArgs e)


{
}
private void ComboBox1_SelectedValueChanged(object sender, EventArgs e)
{
try
{
using (SqlConnection con = new SqlConnection(SqlconStr))
{
con.Open();
using (SqlCommand cmd = new SqlCommand())
{
cmd.Connection = con;
cmd.CommandText = "select * from commandes where
codeclient=@code";
cmd.Parameters.Clear();
SqlParameter param = new SqlParameter();
param.Direction = ParameterDirection.Input;
param.ParameterName = "@code";
param.SqlDbType = SqlDbType.Int;
param.Size = 0;
param.Value = this.ComboBox1.SelectedValue;
cmd.Parameters.Add(param);
try
{

BENTALEB MOHAMED

Page 86

OFPPT TDI

TRAVAUX PRATIQUES
DataTable dt = new DataTable();
SqlDataReader dr = cmd.ExecuteReader();
if (dr.HasRows)
{
dt.Load(dr);
}
this.DataGridView1.DataSource = dt;
}
catch (Exception) { }
}
}
}
catch (SqlException)
{
}

}
}
}

BENTALEB MOHAMED

Page 87

OFPPT TDI

TRAVAUX PRATIQUES

TP N 29

Objectifs :
Dans cet atelier vous allez utiliser corectement un userControl
Proprits mthodes et vnements
1) Crer un nouveau projet
2) Ajouter un contrle utilisateur

3) Dfinir les proprits des boutons

public string Text1 // proprit pour bouton1


{
get { return this.button1.Text ; }
set { this.button1.Text = value; }
}
public string Text2
{
get { return this.button2.Text; }
set { this.button2.Text = value; }
}
public string Text3
{
get { return this.button3.Text; }
set { this.button3.Text = value; }
}
4) Dfinir lvnement de chaque bouton
private void button1_Click(object sender, EventArgs e)
{
MessageBox.Show("click sur " + this.Text1);
}
private void button2_Click(object sender, EventArgs e)
{

BENTALEB MOHAMED

Page 88

OFPPT TDI

TRAVAUX PRATIQUES
MessageBox.Show("click sur " + this.Text2);

}
private void button3_Click(object sender, EventArgs e)
{
MessageBox.Show("click sur " + this.Text3);
}

5) gnrer votre application


6) ajouter un nouveau formulaire
7) votre control utilisateur apprait dans la boite outils

8) Glisser votre utilisateur dans le formulaire

complter votre travail en modifiant les proprits du control utilisateur

Tester votre application

BENTALEB MOHAMED

Page 89

OFPPT TDI

TRAVAUX PRATIQUES

TP N 30

Objectifs :
Dans cet atelier vous allez utiliser corectement un userControl
Proprits mthodes et vnements
1) Crer un nouveau projet dans lequel vous ajouter un control utilisateur

2) Ajouter le code suivant dans votre application


namespace UserControlXX
{
public partial class UCLogin : UserControl
{
public UCLogin()
{
InitializeComponent();
}
[Category("Configuration"), Browsable(true),
Description("Le titre que vous voulez afficher")]
public String Title
{
get
{
return this.gbLoginUserControl.Text;
}
set
{
this.gbLoginUserControl.Text = value;
}
}

BENTALEB MOHAMED

Page 90

OFPPT TDI

TRAVAUX PRATIQUES

[Category("Configuration"), Browsable(true),
Description("Le texte afficher pour le nom
d'utilisateur")]
public String LoginText
{
get
{
return this.lblLogin.Text;
}
set
{
this.lblLogin.Text = value;
}
}
[Category("Configuration"), Browsable(true),
Description("Le texte saisir par l'utilisateur")]
public String LoginValue
{
get
{
return this.textLogin.Text;
}
set
{
this.textLogin.Text = value;
}
}

[Category("Configuration"), Browsable(true),
Description("Le texte afficher pour le mot de passe")]
public String PasswordText
{
get
{
return this.lblPassword.Text;
}
set
{
this.lblPassword.Text = value;
}
}
[Category("Configuration"), Browsable(true),
Description("Le texte afficher pour le mot de passe")]
public String PasswordValue
{
get{ return this.textPassWord.Text; }
set
{
this.textPassWord.Text = value;
}
}

BENTALEB MOHAMED

Page 91

OFPPT TDI

TRAVAUX PRATIQUES

// Dclaration des dlgus


public delegate void ValidButtonClickHandler
(object sender, EventArgs e);
public delegate void CancelButtonClickHandler
(object sender, EventArgs e);
// Dclaration des vnements qui utilisent ces dlgus
[Category("Configuration"), Browsable(true),
Description("Evnement associ au bouton de validation")]
public event ValidButtonClickHandler BoutonValidClick;
[Category("Configuration"), Browsable(true),
Description("Evnement associ au bouton d'annulation")]
public event CancelButtonClickHandler BoutonCancelClick;
protected virtual void OnValidButtonClick(EventArgs e)
{
if (BoutonValidClick != null)
{
BoutonValidClick(this, e);
}
}
protected virtual void OnCancelButtonClick(EventArgs e)
{
if (BoutonCancelClick != null)
{
BoutonCancelClick(this, e);
}
}
private void btValid_Click(object sender, EventArgs e)
{
OnValidButtonClick(EventArgs.Empty);
}
private void btCancel_Click(object sender, EventArgs e)
{
OnCancelButtonClick(EventArgs.Empty);
}

}
}

BENTALEB MOHAMED

Page 92

OFPPT TDI

TRAVAUX PRATIQUES

Glisser votre userControl dans un formulaire

vnements

private void ucLogin1_BoutonCancelClick_1(object sender, EventArgs e)


{
MessageBox.Show("code qui valide la connexion");
}
private void ucLogin1_BoutonValidClick(object sender, EventArgs e)
{
MessageBox.Show("Code qui annule la connexion");
}

BENTALEB MOHAMED

Page 93

OFPPT TDI

TRAVAUX PRATIQUES

TP N 31

Objectifs :
Dans cet atelier vous allez utiliser corectement un userControl
Proprits mthodes et vnements
Crer le control utilisateur suivant :

namespace bas_donnees_user_control
{
public partial class UserControl1 : UserControl
{
public UserControl1()
{
InitializeComponent();
}
static SqlConnection cnx = new SqlConnection("Data
Source=.;Database=GClient;Integrated Security=True");
SqlCommandBuilder build = new SqlCommandBuilder();
SqlDataAdapter da = new SqlDataAdapter("Select * from Client",
cnx);
public DataSet ds = new DataSet();
private void UserControl1_Load(object sender, EventArgs e)
{
build.DataAdapter = da;
da.Fill(ds);
da.FillSchema(ds, SchemaType.Source);
dataGridView1.DataSource = ds.Tables[0];
dataGridView1.Rows[0].Selected = true;
}

BENTALEB MOHAMED

Page 94

OFPPT TDI

TRAVAUX PRATIQUES

int posi=0;
private void naviguer ()
{
for (int i = 0; i < dataGridView1.Rows.Count; i++)
{
if (dataGridView1.Rows[i].Selected)
{
dataGridView1.Rows[i].Selected = false;
}
}
dataGridView1.Rows[posi].Selected = true;
}
private void premier_Click(object sender, EventArgs e)
{
posi = 0;
naviguer();
}
private void prcdent_Click(object sender, EventArgs e)
{
try
{
posi--;
naviguer();
}
catch {}
}
private void Suivant_Click(object sender, EventArgs e)
{
try
{
posi++;
naviguer();
}
catch { }
}
private void dernier_Click(object sender, EventArgs e)
{
posi = ds.Tables[0].Rows.Count - 1;
naviguer();
}
}
}

BENTALEB MOHAMED

Page 95

OFPPT TDI

TRAVAUX PRATIQUES

TP N 32

Objectifs :
Dans cet atelier vous allez utiliser corectement un userControl
Proprits mthodes et vnements (voir Examen 2013 pour TP )

namespace EFF2013Q4
{
public partial class UCSession : UserControl
{
private string strCon;
private SqlConnection con = new SqlConnection();
private SqlDataAdapter daSession;
private SqlCommand cmd;
private DataSet ds = new DataSet();
public UCSession()
{
InitializeComponent();
strCon = Properties.Settings.Default.ConnexionString;
con.ConnectionString = strCon;
daSession = new SqlDataAdapter("select * from session", con);
daSession.FillSchema(ds, SchemaType.Source, "session");
daSession.Fill(ds, "session");
this.comboBox1.DataSource = ds.Tables["session"];
this.comboBox1.DisplayMember = "NumeroSession";
}
public event EventHandler boutonOkClick;
protected virtual void OnboutonOkClick(EventArgs e)
{
if (boutonOkClick != null)
{
boutonOkClick(this, e);
} }//fin mthode

BENTALEB MOHAMED

Page 96

OFPPT TDI

TRAVAUX PRATIQUES

public void Calculer()


{
con.Open();
cmd = new SqlCommand("select count(*) from Inscrit where
NumeroSession=" + comboBox1.Text, con);
this.textBox1.Text = cmd.ExecuteScalar().ToString();
con.Close();
if (int.Parse(textBox1.Text) > 20)
MessageBox.Show("Trop de participants");
}
private void button1_Click(object sender, EventArgs e)
{
Calculer();
OnboutonOkClick(EventArgs.Empty);
}
//Property
public
{
get
{

string TextBoxText

return textBox1.Text; }
set { this.textBox1.Text = value; }
}
//Property
public string ComboText
{ get { return comboBox1.Text; }
set { this.comboBox1.Text = value; }
}
}
}

BENTALEB MOHAMED

Page 97

OFPPT TDI

TRAVAUX PRATIQUES

namespace EFF2013Q4
{
public partial class Form2 : Form
{
string strCon;
string requete;
SqlConnection con = new SqlConnection();
SqlDataAdapter da;
SqlCommand cmd = new SqlCommand();
DataSet ds = new DataSet();
public Form2()
{
InitializeComponent();
strCon = Properties.Settings.Default.ConnexionString;
con.ConnectionString = strCon;
cmd.Connection = con;
}
private void button1_Click(object sender, EventArgs e)
{
UCSession ucSession1 = new UCSession();
ucSession1.ComboText = textBox1.Text;
ucSession1.Calculer();
textBox2.Text = ucSession1.TextBoxText;
}

BENTALEB MOHAMED

Page 98

OFPPT TDI

TRAVAUX PRATIQUES

TP N 33

Objectifs :
Dans cet atelier

using System.Data.SqlClient;
namespace les_clients_Meme_pays
{
public partial class Form1 : Form
{
string chaine = Properties.Settings.Default.constr;
string a = Properties.Settings.Default.Machaine;
SqlConnection con =new SqlConnection ();
SqlDataAdapter daCombo;
DataSet ds = new DataSet();
public Form1()
{
InitializeComponent();
}

BENTALEB MOHAMED

Page 99

OFPPT TDI

TRAVAUX PRATIQUES

private void Form1_Load(object sender, EventArgs e)


{
con.ConnectionString = chaine;
daCombo = new SqlDataAdapter(
"select customerId ,country,CompanyName +'
+' '+ country as Disp from Customers", con);
daCombo.Fill(ds, "coustomers");

'+ContactName

comboBox1.DisplayMember = "Disp";
comboBox1.ValueMember = "CustomerID";
comboBox1.DataSource = ds.Tables["coustomers"];
}

private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)


{
DataSet ds1 = new DataSet();
SqlDataAdapter daCritere = new SqlDataAdapter();
daCritere.SelectCommand = new SqlCommand (
"select CustomerID , Country from Customers where Country=
(select country from customers where customerid like '" +
comboBox1.SelectedValue + "')", con);
daCritere.Fill(ds1,"resultats");
dataGridView1.DataSource = ds1;
dataGridView1.DataMember = ds1.Tables["resultats"].ToString();
}
}
}

BENTALEB MOHAMED

Page 100

OFPPT TDI

TRAVAUX PRATIQUES

TP N 34

Objectifs :
Dans cet atelier nous allons utiliser les objets le lespace de noms
System.Data.Common

Crer une classe DataAcces


using System.Data.Common;
using System.Configuration;
using System.Data;
namespace generique
{
class DataAcces
{
//variables prives
private DbProviderFactory DbPFact;
private ConnectionStringSettingsCollection ConStrColl;
//la collection des connexionstrings
private static DataAcces instance; // principe du singleton
//la cl pour empecher l'instance de la classe DataAcces
private DataAcces() { }

BENTALEB MOHAMED

Page 101

OFPPT TDI

TRAVAUX PRATIQUES

public static DataAcces getinstance()


{
if (instance == null)
{
instance = new DataAcces();
//rcuprer les chaines de connexion
instance.ConStrColl =
ConfigurationManager.ConnectionStrings;
//Rcupration de la classe fabrique suivant le provider
instance.DbPFact =
DbProviderFactories.GetFactory(instance.ConStrColl[1].ProviderName);
}
return instance;
}
//cration d'une connexion
private DbConnection getConnection() {
//cration de la connection
DbConnection con = this.DbPFact.CreateConnection();
//affectation de la chane de connexion
con.ConnectionString = ConStrColl[1].ConnectionString;
return con;
}
//cration d'une commande
private DbCommand createCommand( string commandtext , CommandType
cmdType ) {
DbCommand dbcommand
= this.DbPFact.CreateCommand();
dbcommand.CommandType = cmdType;
dbcommand.CommandText = commandtext;
return dbcommand;
}
//Excution d'un ordre qui ne renvoit pas de donnes
public int ExecuteNonQuery( string commandtext ) {
DbConnection con
= null;
try{
con = getConnection();
DbCommand cmd
= createCommand(commandtext, CommandType.Text);
cmd.Connection = con;
con.Open();
return cmd.ExecuteNonQuery();
}finally{
if (con.State != ConnectionState.Closed){
}

con.Close();}

}
//Excution d'un Ordre qui renvoit une seule valeure
public Object ExecuteScalar(string commandtext ) {
DbConnection con
= null;
try{
con = getConnection();
DbCommand cmd
= createCommand(commandtext,
CommandType.Text);
cmd.Connection = con;
con.Open();
return cmd.ExecuteScalar();
}finally{

BENTALEB MOHAMED

Page 102

OFPPT TDI

TRAVAUX PRATIQUES
// if (con.State != ConnectionState.Closed) { con.Close();}
}

}
//crer un datareader
public DbDataReader getReader(string commandtext ) {
DbConnection con
= null;
DbCommand cmd ;
try{
con = getConnection();
cmd = createCommand(commandtext, CommandType.Text);
cmd.Connection = con;
con.Open();
} finally{
// if (con.State != ConnectionState.Closed ){ con.Close();}
}
return cmd.ExecuteReader();
}
//rcuprer une dataset
public DataSet getDataset(string tableName, string commandtext)
{
DbConnection con = null;
DbDataReader rd = null;
DataSet ds;
try
{
con = getConnection();
DbCommand cmd = createCommand(commandtext,
CommandType.Text);
cmd.Connection = con;
con.Open();
rd = cmd.ExecuteReader(CommandBehavior.CloseConnection);
ds = new DataSet();
ds.Load(rd, LoadOption.PreserveChanges, tableName);
}
finally
{
// if (con.State != ConnectionState.Closed) { con.Close(); }
}
return ds;
}
}
}

Code du formulaire
using System.Data.Common;
namespace generique
{
public partial class Form1 : Form
{
DataAcces generique = DataAcces.getinstance();
public Form1()
{

BENTALEB MOHAMED

Page 103

OFPPT TDI

TRAVAUX PRATIQUES
InitializeComponent();

}
private void Form1_Load(object sender, EventArgs e)
{
DataSet ds = generique.getDataset("personne", "select * from personne");
DataGridView1.DataSource = ds.Tables["personne"];
}
private void ajouter_Click(object sender, EventArgs e)
{
generique.ExecuteNonQuery("insert into personne values (" +
TextBox1.Text + ",'" + TextBox2.Text + "','" + TextBox3.Text + "')");
Form1_Load(sender, e);
}
private void update_Click(object sender, EventArgs e)
{
generique.ExecuteNonQuery("update personne set matricule=" +
TextBox1.Text + ", nomp='" + TextBox2.Text + "', prenomp='" + TextBox3.Text
+ "' where matricule= " + TextBox1.Text);
Form1_Load(sender, e);
}
private void delete_Click(object sender, EventArgs e)
{
generique.ExecuteNonQuery("delete from personne where matricule
=" + TextBox1.Text);
Form1_Load(sender, e);
TextBox1.Clear();
TextBox2.Clear();
TextBox3.Clear();
}
private void NewRowIndex_Click(object sender, EventArgs e)
{
DataGridView1.Rows[DataGridView1.NewRowIndex].Cells[1].Value =
"Nbr Personnes";
DataGridView1.Rows[DataGridView1.NewRowIndex].Cells[2].Value =
generique.ExecuteScalar("select count(*) from personne");
}
private void Recherche_TextChanged(object sender, EventArgs e)
{
DataSet ds = new DataSet();
DbDataReader dr = generique.getReader("select * from personne
where nomp like '" + TextBox4.Text + "%'");
ds.Load(dr, LoadOption.PreserveChanges, "personne");
DataGridView1.DataSource = ds.Tables["personne"];
DataGridView1.Rows[0].Selected = true;
}
}
}

BENTALEB MOHAMED

Page 104

OFPPT TDI

TRAVAUX PRATIQUES

TP N 35

Objectifs :
Dans cet atelier nous allons utiliser les objets le lespace de noms
System.Data.Common

Crer une classe


using System.Data.Common;
using System.Configuration;
using System.Data;
namespace generique
{
class AdapterGeneric
{// dclarations prives"
//Pattern de Singleton et initialisation
private DbProviderFactory dbProvFact ;
private ConnectionStringSettingsCollection ConStrCol
private DbDataAdapter da ;

BENTALEB MOHAMED

Page 105

OFPPT TDI
private DbCommand cmd
// fin dclaration

TRAVAUX PRATIQUES
;

//Pattern Singleton"
static AdapterGeneric instance;
//constructeur doit etre priv
private AdapterGeneric() { }
//Rcuperation de l'instance "
public static AdapterGeneric getinstance(string comd = "")
{
instance = new AdapterGeneric();
//rcuprer la chaine de connexion
instance.ConStrCol = ConfigurationManager.ConnectionStrings;
//Rcuprer le nom du provider
instance.dbProvFact =
DbProviderFactories.GetFactory(instance.ConStrCol[1].ProviderName);
//creer le dataadapter
instance.da = instance.dbProvFact.CreateDataAdapter();
//integrer le commandbuilder
instance.getcommandbuilder(instance.da);
//si la commande est spcifi
if (comd != "") { instance.cmd = instance.CreateCommand(comd); }
return instance;
}
//Rcupration de la connexion"
private DbConnection CreateConnection() {
DbConnection con
= dbProvFact.CreateConnection();
con.ConnectionString = ConStrCol[1].ConnectionString;
return con;
}
// Rcupration de la commande"
public DbCommand CreateCommand(string commande ) {
DbConnection con
= CreateConnection();
cmd = con.CreateCommand();
cmd.CommandText = commande;
return cmd;
}
// #Region "la mthode Fill "
public void Fill( DataSet ds ){
da.SelectCommand = cmd;
da.Fill(ds);
}
//#End Region
//#Region "la mthode Update "
public void Update(DataSet ds
da.Update(ds);
}
//#End Region

BENTALEB MOHAMED

){

Page 106

OFPPT TDI

TRAVAUX PRATIQUES

//Region "la mthode getcommandBuilder "


private void getcommandbuilder( DbDataAdapter adapter ){
DbCommandBuilder builder
= dbProvFact.CreateCommandBuilder();
builder.DataAdapter = adapter;
}
//#End Region
}
}

Code du formulaire
namespace generique
{
public partial class Form2 : Form
{ AdapterGeneric da
= AdapterGeneric.getinstance();
DataSet ds = new DataSet();
public Form2()
{InitializeComponent();}
private void Ajouter_Click(object sender, EventArgs e)
{DataRow rw
= ds.Tables[0].NewRow();
rw[0] = TextBox1.Text;
rw[1] = TextBox2.Text;
rw[2] = TextBox3.Text;
ds.Tables[0].Rows.Add(rw);
da.Update(ds);}
private void Supprimer_Click(object sender, EventArgs e)
{ ds.Tables[0].Rows[DataGridView1.CurrentRow.Index].Delete();
da.Update(ds);}
private void modifier_Click(object sender, EventArgs e)
{ DataRow ligne =
ds.Tables[0].Rows[DataGridView1.CurrentRow.Index];
ligne.BeginEdit();
ligne[0] = this.TextBox1.Text;
ligne[1] = TextBox2.Text;
ligne[2] = TextBox3.Text;
ligne.EndEdit();
da.Update(ds);}
private void Form2_Load(object sender, EventArgs e)
{da.CreateCommand("select * from personne");
da.Fill(ds);
DataGridView1.DataSource = ds.Tables[0];}
private void DataGridView1_CellClick(object sender,
DataGridViewCellEventArgs e)
{
try{
DataGridView1.CurrentRow.Selected = true;
TextBox1.Text =
DataGridView1.CurrentRow.Cells[0].Value.ToString();
TextBox2.Text =
DataGridView1.CurrentRow.Cells[1].Value.ToString();
TextBox3.Text =
DataGridView1.CurrentRow.Cells[2].Value.ToString();
} catch (Exception ){
MessageBox.Show("Il s'agit d'une ligne vide");}}
}
}

BENTALEB MOHAMED

Page 107

OFPPT TDI

BENTALEB MOHAMED

TRAVAUX PRATIQUES

Page 108

OFPPT TDI

TRAVAUX PRATIQUES

Etude de cas 1

LInstitut ISGI fait appel aux comptences des programmeurs pour informatiser le
processus de gestion de notes des stagiaires.
La base de donnes correspondante lapplication la structure suivante :

Table Module :
- Num_Mod : Le numro du module.
- Nom_Mod : Le nom du module.
Table Notes :
- Num_Sta : Le numro du stagiaire.
- Num_Mod : Le nom du module.
- Note : La note du module.
Table Stagiaire :
- Num_Sta : Le numro du stagiaire.
- Nom_Sta : Le nom du stagiaire.
- Pr_Sta : Le prnom du stagiaire.
- Date_Sta : La date de naissance du stagiaire.
1. Crer la base de donnes sous SQL SERVER
Au lancement de lapplication il prsente une feuille de dmarrage avec des menus et sous
menus.
2. Le choix du sous menu Gestion des stagiaires du menu Gestion permet dafficher
une feuille comme ci-dessous :

BENTALEB MOHAMED

Page 109

OFPPT TDI

TRAVAUX PRATIQUES

Programmer :

Nouveau stagiaire
Enregistrer stagiaire
Modifier stagiaire
Supprimer stagiaire
Boutons de navigation
Rechercher stagiaire par numro
Rechercher stagiaire par nom et prnom
le bouton Moyenne permet dafficher une boite de dialogue affichant la moyenne du
stagiaire.

3. Le sous menu Gestion des notes du menu Gestion permet dafficher une feuille
comme ci-dessous :
Le choix dun stagiaire permet dafficher dans une liste les modules passs par ce stagiaire
avec les notes et le moyenne gnrale.
Lorsquon choisie un module la note de ce module doit tre affich.
Lorsquon clique sur une ligne de la liste ses informations doivent tre affiches.

BENTALEB MOHAMED

Page 110

OFPPT TDI

TRAVAUX PRATIQUES

Raliser cette interface et programmer les fonctionnalits demandes


4. Limpression se fait aprs avoir choisi un stagiaire partir de liste droutante et cliquer
sur le bouton Aperu.

BENTALEB MOHAMED

Page 111

OFPPT TDI

TRAVAUX PRATIQUES
Etude de cas 2

On veut dvelopper une application qui gre les rencontres des tournois de Tennis dune
saison donne.
Chaque joueur a un nom et un sexe. Deux joueurs peuvent former une quipe. Un tournoi est
identifi par son nom et se droule dans un pays donn une date prvue. la fin dun
tournoi, un joueur ou une quipe participant ce tournoi obtient un score qui reprsente le
nombre de tours passs dans le tournoi (1 er tour vaut 1 point, 2 me tour vaut 2 points, etc.).
On attribue chaque tournoi un coefficient selon son importance.
Le score final dun joueur (ou dune quipe) est obtenu de la manire suivante :
n

score coefficient

Pour les n tournois de lanne. Les joueurs (ou quipes) sont classs par ordre dcroissant de
leur score final.
Pour assurer cette gestion, le schma relationnel suivant a t tabli :
Joueur (NoJoueur, NomJoueur, Sexe, NoEquipe)
Equipe (NoEquipe)
Tournoi (NoTournoi, NomTournoi, Date, Coef, Pays)
Jeu_Simple (NoJoueur, NoTournoi, Score_Joueur)
Jeu_Double (NoEquipe, NoTournoi, Score_Equipe)
TRAVAIL FAIRE
I Cration de la base de donnes
1. Crer la base de donnes sous SQL SERVER
2. Crer trois enregistrements par table
II Application
1. Crer une application MDI avec menu qui permet dexcuter les traitements suivants :
2. Mise jour de la table Joueur. Prvoir les boutons : Ajouter, Modifier, Enregistrer,
Supprimer, Fermer et des boutons de dplacement entre les enregistrements.
3. Mise jour de la table Tournoi. Prvoir les boutons : Ajouter, Modifier, Enregistrer,
Supprimer, Fermer et des boutons de dplacement entre les enregistrements.
4. Former des quipes constitues de deux joueurs ; lutilisateur saisi le n dquipe et
slectionne les deux joueurs dans deux listes de choix

BENTALEB MOHAMED

Page 112

OFPPT TDI

TRAVAUX PRATIQUES

5. Enregistrer le score dun jeu simple.


Tous les champs sont requis, le NoJoueur et le NoTournoi sont choisir dans des
zones de listes toutes les donnes du joueur choisi et le tournoi choisi sont affiches.
6. Enregistrer le score dun jeu double.
au choix de lquipe, les noms des deux joueurs sont affichs.
7. Crer un formulaire qui affiche pour un pays donn, tous les tournois qui sy
droulent. Trier le rsultat par importance de tournoi (coefficient) dcroissante.
8. Calculer pour un joueur donn, ou une quipe le score total (somme des scores
pondrs).
9. Imprimer la liste des joueurs masculins participants un tournoi donn
10. Imprimer les dix premiers joueuses classes en ordre dcroissant (selon le score final)
11. Crer un graphique reprsentant le nombre de participants par pays de tournoi
12. Crer un programme dinstallation de votre application
Le programme dinstallation doit crer la base de donnes si elle nexiste pas.

Etude de cas 3

Considrant le schma relationnel, de la gestion dun parc informatique, suivant :


SEGMENT (N_SEGMENT, NOM_SEGMENT)
SALLE (N_SALLE, NOM_S, NB_POSTE, #N_SEGMENT)
POSTE (N_POSTE, NOM_P, #N_SEGMENT, AD, TYPE_P, #N_SALLE)
LOGICIEL (N_LOG, NOM_L, DATE_ACH, VERSION, TYPE_L)
INSTALLER (#N_POSTE, #N_LOG, DATE_INS)
Les types des colonnes sont les suivants :
N_SEGMENT
NOM_SEGMENT
N_SALLE
VARCHAR(7)
NOM_S
NB_POSTE
N_POSTE
NOM_P

: 3 premiers groupes IP (ex : 130.120.80)


: nom attribu au segment
: numro la salle (ex : s01, s02...)

VARCHAR(10)
VARCHAR(20)

: nom de la salle
: nombre de postes de travail dans la salle
: code interne associ au poste (ex : p1)
: nom (ou alias) donn au poste

VARCHAR(20)
INT
VARCHAR(7)
VARCHAR(20)

BENTALEB MOHAMED

Page 113

OFPPT TDI

TRAVAUX PRATIQUES

AD
: dernier groupe de chiffre ip
TYPE_P
: type du poste (ex : UNIX, TX,....)
DATE_INS
: date dinstallation du logiciel sur le poste
N_LOG
: numro interne du logiciel
NOM_L
: nom du logiciel
DATE_ACH
: date dachat du logiciel
VERSION
: version du logiciel (ex : 8.0)
TYPE_L
: type du logiciel (ex : UNIX, PCWS...)
ICration de la base de donnes:

VARCHAR(2)
VARCHAR(6)
DATETIME
VARCHAR(5)
VARCHAR(20)
DATETIME
VARCHAR(7)
VARCHAR(6)

a. Crer cette base de donnes dans SQLServer (Tables + Relations) .


b. Ecrire le ou les triggers qui permettent de grer lattribut NB_POSTE .
II-

Client Serveur
a. Concevoir un formulaire qui permet denregistrer les Salles et de stocker les
informations dans la base de donnes.
i. Le programme doit vrifier lexistence dun enregistrement et renvoyer
un message utilisateur dans le cas contraire.
ii. Un combo box qui charge automatiquement les Segements.
b. Concevoir un deuxime formulaire qui permet la mise jour des
enregistrements et faire les programmes correspondants (Suppression,
Modification).
c. Concevoir un troisime formulaire qui permet dafficher les informations des
Postes par Salle.
d. Concevoir un quatrime formulaire qui permet dafficher les informations des
logiciels installs sur un poste choisi dans le troisime formulaire.
e. Concevoir un cinquime formulaire qui sert de menu pour appeler les diffrents
formulaires.
f. Crer un tat qui liste toutes les Salles et leurs Postes.
g. Crer un tat qui liste tous les postes et les logiciels qui y sont installs pour
une salle bien dfinie.

BENTALEB MOHAMED

Page 114

OFPPT TDI

TRAVAUX PRATIQUES

Etude de cas 4

Au niveau national, la natation est un sport gr par la Fdration Marocaine de Natation,


puis par des clubs au niveau des diffrentes villes du Royaume.
La fdration organise des entranements de natation communs aux diffrents athltes dans
le but dharmoniser les pratiques et de dceler les futurs talents. Ces entranements
communs ncessitent de disposer de crneaux horaires dans trois piscines diffrentes.
La fdration souhaite mettre en place une gestion informatise afin de contrler que chaque
athlte suit bien son plan d'entranement personnalis. Pour chaque athlte, le plan
d'entranement propos dfinit la distance (exprime en mtres) parcourir pour chaque
entranement.
Pour assurer cette gestion, le schma relationnel suivant a t tabli :
ATHLETE(NumLicence, NomAthlete, PrenomAthlete, CategorieAthlete)
ENTRAINEMENT(NumEntrainement, DateEntrainement, HeureDebut, HeureFin,
NumPiscine#)
PLAN_ENTRAINEMENT(NumEntrainement#, NumLicence#, DistanceAParcourir,
DistanceParcourue)
PISCINE(NumPiscine, NomPiscine, AdressePiscine)
Les champs souligns correspondent aux clefs primaires, les champs suivis du caractre #
sont des clefs trangres.
TRAVAIL FAIRE
I Cration de la base de donnes
1. Crer la base de donnes sous SQL SERVER
2. Crer trois enregistrements par table
II Application Client Serveur
1. Crer une application MDI avec menu qui permet dexcuter les traitements suivants :
2. Mise jour de la table Athlte. Prvoir les boutons : Ajouter, Modifier, Enregistrer,
Supprimer, Quitter et des boutons de dplacement entre les enregistrements.
Tout athlte appartient une catgorie dge (minime, cadet, junior, senior, vtran).
BENTALEB MOHAMED

Page 115

OFPPT TDI

TRAVAUX PRATIQUES

3. Mise jour de la table PISCINE. Prvoir les boutons : Ajouter, Modifier, Enregistrer,
Supprimer, Quitter et des boutons de dplacement entre les enregistrements.
4. Enregistrer un entranement.
Tous les champs sont requis, le NumPiscine est choisir dans un combobox
5. Enregistrer un Plan_entranement. Le NumEntrainement,et le NumLicence sont
choisir dans deux combobox, toutes les donnes de lathlte choisi et lentranement
choisi sont affiches.
La distanceParcourue est toujours infrieure la DistanceAParcourir sinon envoyer un
message derreur
6. On veut tablir la liste des entranements suivis (date, heure dbut, heure fin, nom
piscine, distance parcourir, distance parcourue) par un athlte dont on choisi le n de
licence dans un combobox; cette liste est trier par ordre chronologique inverse
(l'entranement le plus rcent figurant en premier).
7. Imprimer la liste des Athltes trie par catgorie
8. Imprimer le plan dentranement dun athlte donn, la recherche se fait par le
NumLicence
9. utiliser dans toutes les procdures la gestion des exceptions pour intercepter les erreurs
10. Crer un programme dinstallation de votre application
Le programme dinstallation doit crer la base de donnes si elle nexiste pas, aprs avoir
demand le nom du serveur, le compte utilisateur SQL Server et le mot de passe

BENTALEB MOHAMED

Page 116

OFPPT TDI

TRAVAUX PRATIQUES

Etude de cas 5

Il sagit de dvelopper une application de gestion dune bibliothque publique de prt des
ouvrages. Toute personne a le droit de sadhrer la bibliothque et bnficier de ses
services. On distingue plusieurs types dadhrents : des tudiants, des fonctionnaires . etc.
La bibliothque possde plusieurs types douvrages, on retrouve par exemple des livres, des
revues, des romans, des cassettes vido etc. Chaque adhrent na le droit demprunter quun
seul article la fois. Aprs ltude dtaille du systme dinformation de la mdiathque nous
avons pu dgager le schma relationnel suivant :
TABLE : ADHERENTS
CHAMPS
DESCRIPTION
CODADH Code de ladhrent
NOMADH Nom de ladhrent
ADRADH Adresse de ladhrent
TELADH
Tlphone de ladhrent
CINADH
C.I.N de ladhrent
DNADH
Date de naissance de ladhrent
TYPADH
Type de ladhrent

TYPE
Numrique
chane
chane
chane
chane
date
chane

TABLE : OUVRAGES
CHAMPS
DESCRIPTION
TYPE
CODOUV Code de louvrage
Numrique
TITOUV
Titre de louvrage
chane
NOMAUT Nom de lauteur
chane
TYPOUV Type ouvrage soit livre, roman
chane
RESOUV Rsume de louvrage
chane
THEME
Thme de louvrage
chane
NOMCOL Nom de la collection de
chane
louvrage
NOMEDIT Nom de lditeur de louvrage
chane
DATEDIT Date ddition de louvrage
date
DATACH Date dachat
date
NBPAGE Nombre de pages
Numrique
TABLE : EMPRUNTS
CHAMPS
NUMEMP
CODADH
CODOUV
DATEMP
DATRET

DESCRIPTION

TYPE

Numro demprunt
Numrique
Code de ladhrent
Numrique
Code
de
louvrage Numrique
emprunt
Date demprunt
Date
Date de retour
Date

BENTALEB MOHAMED

Page 117

OFPPT TDI

TRAVAUX PRATIQUES

1) La base de donnes
Crer la base de donnes sous SQL SERVER avec lensemble de ses tables selon le
descriptif prsent ci-dessus.
2) Gestion des adhrents :
2.1) Le code adhrent doit tre automatiquement incrmenter.
2.2) Crer des boutons de navigation entre les enregistrements.
2.3) Ajouter sur clique du bouton de commande Ajouter un nouvel adhrent tout en vrifiant
sil na pas t dj ajout. Choisir le champs qui convient pour cette vrification.
2.4) Cette interface doit permettre de filtrer les adhrents dont le nom commence par une
lettre choisie

3) Gestion des ouvrages :


3.1) Ajouter un nouvel ouvrage, tout en vrifiant sil na pas t dj ajout si non prvoir
message derreur.
3.2) Modifier un ouvrage dj prsent dans la base de donnes.
3.3) Supprimer un ouvrage connaissant son code sur action du bouton Supprimer.
4) Gestion des Emprunts :
4.1) Au chargement de la feuille, le code doit remplir la liste code adhrent et la liste code
ouvrage par les donnes correspondantes partir de la base de donnes. Les ouvrages
emprunts ne doivent pas se charger dans cette liste. Au choix des codes adhrent et
ouvrage les informations sur le nom et le titre saffichent.
4.2) Le code doit proposer un numro incrmental pour le nouveau emprunt.
4.3) Ajouter un emprunt suite laction clic du bouton Emprunter.
4.4) Sur clic du bouton Annuler_Emprunt le code doit supprimer de la table Emprunts
lemprunt correspondant aprs confirmation.
5) Gestion des retours des ouvrages :
5.1) Au dmarrage de la feuille le code doit remplir le combo box par la liste des adhrents
(le code).
5.2) Au choix dun code, le nom de ladhrent saffiche et une liste se charge de tous les
emprunts non encore retourns par cet adhrent.
5.3) Le clic sur le bouton Valider enregistre le retour de louvrage slectionn.
5.4) Une tiquette affiche le nombre demprunts non retourns de cet adhrent.
6) Edition des adhrents
6.1) On souhaite dans cette partie pouvoir lister lensemble des adhrents ns entre deux dates
diffrentes selon le modle dtat de sortie suivant :
BENTALEB MOHAMED

Page 118

OFPPT TDI

TRAVAUX PRATIQUES

RABAT
le : ././

Amis Livres

LISTE DES ADHERENTS NES


ENTRE . ET ..

Code

Nom

C.I.N

Date de
naissance

6.2) Prparer un tat avec la liste des ouvrages emprunts classs par date selon la
reprsentation suivante :
RABAT , le : ././
Amis Livres
LISTE DES OUVRAGES EMPRUNTES
Code

Titre

Editeur

Nom Adhrent

Date
Emprunt

7) STATISTIQUE SUR LES EMPRUNTES PAR ANNEE


Prsenter sous forme dun graphique histogramme des statistiques sur le nombre des
ouvrages emprunts par anne

BENTALEB MOHAMED

Page 119

OFPPT TDI

TRAVAUX PRATIQUES

Etude de cas 6

Etude de cas :
On dsire informatiser la gestion des rservations et des sjours pour lhtel Ibis :
Pour les sjours, on enregistre la date dentre, le type de sjour (Journalier, Semaine, Weekend) et la dure
du sjour. Pour un sjour Semaine, la dure est 7j., pour type Weekend la dure est 3j., et pour le type
Journalier la dure est le nombre de jours souhaits par le client.
Le schma relationnel de la base de donnes est le suivant :
Client (IdClient, NomClient, AdresseClient, TelClient)
Rservation (CodeReservation, IdClient, Date, PensionComplete)
Sejour (NumSejour, CodeReservation, DateSejour, TypeSejour, DureeSejour)
ReservationAnnulee (CodeReservation, IdClient, DateAnnulation)
Travail faire :
1) Cration de la BD
a. Crer la base de donnes Sous SQL SERVER en respectant le schma relationnel ci-dessus, les
principales caractristiques des champs doivent tre dduites.
Raliser une interface utilisateur conviviale et ergonomique pour
rservations.

lapplication de gestion des

2) Gestion des Clients


a. Ecrire le code pour les boutons (premier, suivant, prcdent, dernier) en affichant le message de
dbordement.
b. Ecrire le code pour le bouton Ajout en vrifiant la contrainte de remplissage de tous les champs
et l'unicit du code client.
c. Ecrire le code pour le bouton Supprimer
d. Ecrire le code pour le bouton Modifier
e. Ecrire le code pour le bouton Rechercher pour afficher les informations correspondantes ou
afficher un message de non existence.
3) Gestion des rservations
a. Ecrire le code qui permet dafficher les informations dun Client (Nom, Tlphone) ds quon
choisit le numro du client dans le combo.
b. Ecrire le code pour ajouter les informations de rservations dans la table rservation.
4) Gestion sjour
a.
b.
c.
d.

Raliser l'interface de la feuille "Ajout dun sjour"


Le numro de rservation est rempli partir de la table rservation dans une liste.
Le numro de sjour est auto incrment
Le type de sjour est un combo qui contient (journalier, Week end, Semaine).

BENTALEB MOHAMED

Page 120

OFPPT TDI

TRAVAUX PRATIQUES

e. le bouton Nouveau permet deffacer les zones de texte.


f. Le bouton Ajouter permet lajout dun nouveau sjour dans la table Sjour. Vrifier lunicit de
lenregistrement, si non message derreur.
5) Feuille Rservation par type
a. Raliser la feuille "Rservation par type" pour afficher toutes les rservations et la dure
de sjour pour un type de sjour donn partir d'un combo.
b. En bas de la feuille ajouter un label qui affiche le nombre des rservations affiches dans la
grille.
6) Rservation annule
Ecrire un programme pour grer les rservations annules tel que :
a. Sur la feuille de Ajout de rservation ajouter en bas la partie Annulation de
rservation , placer un bouton Annuler . Quand on clique sur ce bouton, le numro de la
rservation annuler est saisi dans un Inputbox .
b. Le programme vrifie dabord si le numro de rservation fourni est enregistr dans la table
Rservation , puis aprs une confirmation de lutilisateur, ajoute la rservation annule
dans la table Rservation annule .
c. La rservation annule est supprime de la table Rservation .
7) Etat
a. Crer un tat ddition de toutes les Rservations ralises avec les sjours pour chaque
rservation.
b. Sur la feuille Ajout de sjour placer un bouton Imprimer facture qui permet dimprimer la
facture pour un sjour daprs les rgles :
Sjour journalier 480 dh /jour
Sjour week-end 320 dh /jour
Sjour semaine 260 dh /jour
Si le client a choisi une pension complte ajouter 100 dh par jour.

BENTALEB MOHAMED

Page 121

OFPPT TDI

TRAVAUX PRATIQUES

Etude de cas 7

Etude de cas :
Une cole de formation utilise pour la gestion des notes des stagiaires, la base de donnes
GESNOTES sous Sql server et les traitements sous Visual studio .net
La base de donnes :
-Tables Stagiaires (NumSt, NomSt, PrenSt, NomFilire)
-Tables Modules (CodeModule, LibelleModule, masseHoraire)
-Tables Notation (NumSt, CodeModule, note)
1- crer la base de donnes sur le serveur Sql server 2000 ;
2- crer une feuille MDI pour laccs aux feuilles qui suivent ;
3- raliser le formulaire de gestion des stagiaires : ajout, modification, suppression ;
4- raliser le formulaire de gestion des modules : ajout, modification, suppression ;
5- raliser le formulaire pour lajout dune notation : le codemodule et le numSt doivent
tre choisis dans des contrles comboBox ;
6- raliser le formulaire consultation des stagiaires permettant dafficher la liste des
stagiaires ; il contient une grille, un bouton filtrer et un cadre (groupBox).
-Le cadre contient trois boutons doptions (Tous, Nom stagiaire, nom filire) et une
zone de texte
-Le bouton Filtrer permet dappliquer les filtres suivants la grille ;
-La grille est filtre selon le texte saisi dans la zone de texte et selon le choix dans les
boutons doptions :
*Si on slectionne le bouton doption nom stagiaire et on tape dans la zone de texte
F , par exemple, alors la grille affiche uniquement les stagiaires de nom commenant
par F
* Si on slectionne le bouton doption nom filire et on tape dans la zone
de texte TCE alors la grille affiche uniquement les stagiaires de la filire
TCE
*Pour afficher tous les stagiaire on choisi le bouton Tous.
Dtacher la base de donnes ; fermer toutes les applications et compresser votre dossier de

BENTALEB MOHAMED

Page 122

OFPPT TDI

TRAVAUX PRATIQUES

Etude de cas 8

Etude de cas :
On se propose de grer les missions dun organisme public, lanalyse a abouti au modle
relationnel suivant :
Vehicule (ImmatVehicule, totalkm)
Mission (ImmatVehicule #, datemission, km, codeAgent#, numChantier#)
Agent (codeAgent, nomAgent)
Transporter (codeAgent #, (ImmatVehicule, datemission)#)
Chantier (numChantier, adresse)
Pour assurer cette gestion, le schma relationnel suivant a t tabli :

TRAVAIL FAIRE
I Cration de la base de donnes
3. Crer la base de donnes.
4. Crer trois enregistrements par table
II Application
13. Crer une application MDI avec menu qui permet dexcuter
les traitements suivants :
14. Crer un formulaire de mise jour de la table Vehicule. Prvoir les boutons : Ajouter,
Modifier, Enregistrer, Supprimer, Fermer et des boutons de dplacement entre les
enregistrements.

BENTALEB MOHAMED

Page 123

OFPPT TDI

TRAVAUX PRATIQUES

15. Mise jour de la table Mission. Prvoir les boutons : Ajouter, Modifier, Enregistrer,
Supprimer, Fermer et des boutons de dplacement entre les enregistrements. (chaque
cl trangre sera choisie partir dune liste modifiable)
16. Mise jour de la table type Transporter. Prvoir les boutons : Ajouter,
Modifier, Enregistrer, Supprimer, Fermer et des boutons de dplacement entre les
enregistrements. (chaque cl trangre sera choisie partir dune liste modifiable)
17. Crer un formulaire qui affiche, pour un Vehicule choisis dans
un combo box, la liste des Transports auxquels il a t utilis.
18. Crer un formulaire qui affiche, pour un Agent choisis dans
un combo box, la liste des missions quil a effectues.
19. Imprimer la liste des missions par agents ainsi que le nombre
de missions de chaque Agent
Imprimer la liste des missions entre deux dates donnes

BENTALEB MOHAMED

Page 124

OFPPT TDI

TRAVAUX PRATIQUES

Etude de cas 9

Etude de cas :
Une socit compte dvelopper une application de gestion de son parc vhicule ;
elle consiste grer les vhicules, les conducteurs, les diffrents entretiens,
lassurance, suivre les dpenses qui sont spcifiques un vhicule prcis pour
dterminer sa rentabilit, lhistorique des pannes et des accidents concernant un
vhicule. Lapplication permet aussi de dterminer les vhicules dont lassurance est
sur le point dexpirer. Lapplication utilise la base de donnes base sur le modle
suivant :
N.B. Les champs marqus en gras et souligns reprsentent les cls primaires
des tables et les champs marqus par # reprsentent les cls trangres.
Vehicule (immat, marque, modele, puissance, carburant, dateAchat,
compteur, #idconducteur)
Conducteur (idconducteur, nomC, prenC, dateN, pass)
HistoConducteur (idHC, #immat, #idconducteur, dateDebut, dateFin)
AssVehicule (idAss, nomAssureur, dateAss, dateExpiration, #immat, montant)
Panne (idPanne, datePanne, dateReprise,descPanne, kilometrage, # immat)
Accident (idAccident, dateAccident, note, # immat)

BENTALEB MOHAMED

Page 125

OFPPT TDI

TRAVAUX PRATIQUES

-Structure des tables :


Table Vehicule
Colonne
immat

Type
Alphanumrique

marque
modele
puissance
carburant

Alphabtique
Alphanumrique
Entier
Alphabtique

dateAchat
compteur

Date
Entier

#idConducteur

Entier

Colonne
idConducteur
nomC
prenC
dateN

Table Conducteur
Type
Entier
Alphabtique
Alphabtique
Date

pass

Alphanumrique

Signification
Ndimmatriculation du
vhicule
Marque du vhicule
Modle du vhicule
Puissance du vhicule
Carburant du
vhicule :Essence, Diesel
Date achat du vhicule
La valeur actuelle du
compteur du vhicule en km
Conducteur actuel du
vhicule

Signification
Identifiant du conducteur
Nom du conducteur
Prnom du conducteur
Date de naissance du
conducteur
Mot de passe du conducteur

dateFin

Table HistoConducteur
Type
Signification
Entier
Identifiant de lhistorique
des conducteurs du
vhicule
Alphanumrique
Nimmatriculation du
vhicule
Entier
Identifiant du conducteur
Date
Date dbut conduite
vhicule
Date
Date fin conduite vhicule

Colonne

Table AssVehicule
Type

Colonne
idHC

immat
idConducteur
dateDebut

BENTALEB MOHAMED

Signification
Page 126

OFPPT TDI

TRAVAUX PRATIQUES

idAss
nomAssureur
dateAss

Entier
Alphabtique
Date

dateExpiration

Date

immat

Alphanumrique

montant

Rel

Identifiant de lassurance
Nom de lassureur
Date de lassurance du
vhicule
Date dexpiration de
lassurance du vhicule
Nimmatriculation du
vhicule
Montant de lassurance

Table Accident
Colonne
idAccident
dateAccident
note
immat

Type
Entier
Alphabtique
Alphabtique
Alphanumrique

Signification
Identifiant de laccident
Date de laccident
Description de laccident
Nimmatriculation du
vhicule

Table Panne
Colonne
idPanne
descPanne
datePanne
dateReprise

Type
Entier
Alphabtique
Date
Date

Kilometrage

Entier

immat

Entier

Signification
Identifiant de la panne
Description de la panne
Date de la panne
Date de reprise aprs
panne
Valeur du compteur du
vhicule au moment de
la panne
Nimmatriculation du
vhicule

La table histoConducteur permet de garder lhistorique des conducteurs de chaque


vhicule avec les dates de dbut et de fin de conduite du vhicule.
Travail faire :
Enregistrer sur un fichier texte qui porte le nom dossier1.txt les requtes SQL qui
rpondent aux questions suivantes :
Donner les requtes qui permettent de :
1) Crer la base de donnes et remplir les tables par un jeu dessai. (1 pt)
2) Crer une procdure stocke qui affiche la liste des vhicules achets avant
une date donne comme paramtre. (1 pt) (Le code de la procdure doit tre
sauvegard dans le fichier dossier1.txt)
3) Crer une procdure stocke qui affiche les vhicules dont lassurance
expirera dans N jours ; avec N un nombre entier utilis comme paramtre. (1
pt)

BENTALEB MOHAMED

Page 127

OFPPT TDI

TRAVAUX PRATIQUES

4) Crer une procdure stocke qui affiche, pour un vhicule donn comme
paramtre, la liste des pannes qui sont produites durant lanne 2011. Prvoir
dans le jeu dessai, des lignes dans la table Panne avec des dates comprises
dans lanne 2011. (1 pt)
5) Crer un trigger qui refuse lajout dune panne avec une valeur de la colonne
kilometrage infrieure la valeur de la colonne compteur de la table
Vehicule. (1 pt)
6) Pour tenir jour lhistorique des conducteurs dun vhicule, crer un trigger,
qui chaque modification du conducteur dans la table Vehicule, ajoute une
ligne la table HistoConducteur avec des donnes correspondantes au
vhicule et au nouveau conducteur du vhicule ; la colonne dateDebut prend
la date systme et la colonne dateFin reste nulle. (1 pt)
Dossier 2 (7 pts)
Crer une application client/serveur qui se base sur la base de donnes du
dossier 1 permettant dassurer les fonctionnalits suivantes :
1. Crer un menu pour cette application permettant de raliser les oprations
demandes par les questions qui suivent. (0,25 pt)
2. Crer un formulaire de mise jour des pannes avec les lments suivants :
(1,25 pt)
Des boutons de navigation.
Les boutons Ajouter, Modifier, Supprimer et Enregistrer.
Le vhicule est choisi dans une liste droulante.
3. a- Crer un formulaire contenant une grille qui affiche lhistorique des
conducteurs dun vhicule donn; la grille affiche le nom et le prnom des
conducteurs, la date dbut et la date fin de conduite du vhicule. Le vhicule
est choisi dans une liste droulante. (1 pt)
b- Ajouter ct de chaque conducteur une case cocher. Ajouter en bas de
la grille, un bouton de commande qui permet de supprimer le ou les
conducteurs slectionns avec tous les enregistrements connexes. (1 pt)
4. Crer un formulaire permettant dafficher la liste des vhicules ayant fait des
accidents entre deux dates donnes ; les dates doivent tre saisies dans deux
zones de textes. (1 pt)
5. Crer un tat graphique de type secteur qui imprime le nombre de vhicules
par marque du parc. (1 pt)
6. Crer un tat qui imprime lensemble des vhicules avec les informations :
nom de la marque, le modle, le n du matricule, ainsi quun champ qui
donne le rendement du vhicule ; le rendement dun vhicule est
calcul comme suit : le nombre total des jours de pannes du vhicule divis
par le nombre total de jours couls depuis lachat du vhicule. (1,5 pt)
BENTALEB MOHAMED

Page 128

OFPPT TDI

TRAVAUX PRATIQUES

Etude de cas 10

Etude de cas :
Un mdecin dsire informatiser son cabinet mdical, en particulier la gestion des
consultations et prescription de mdicaments. On utilise pour cela la base de donnes
GESTMED sous Sql server et les traitements sous Visual studio .net :
-Table Patients (codeP, nomP, adresse)
-Table Medicaments (ref, libelle, prixUnitaire)
-Table Consultation (numConsul, dateConsul, codeP)
-Table Prescription (numConsul, ref, NombreFois)
NombreFois est le nombre de prise par jour du mdicament
1- crer la base de donnes sur le serveur Sql server 2000 ; (3pts)
2- crer une feuille MDI pour laccs aux feuilles des questions qui suivent ; (2pts)
3- raliser le formulaire de gestion des patients : ajout, modification, suppression ; (3pts)
4- raliser le formulaire pour lajout dune prescription : le numConsul et le champs Ref
doivent tre choisis dans des contrles comboBox ; (3pts)
5- raliser une form avec une grille qui affiche toutes les prescriptions de mdicaments
dune consultation donne (n de consultation choisi dans un comboBox) ; (3pts)
6- raliser un tat qui imprime lordonnance (les prescriptions de mdicaments) pour un
patient correspondant la dernire consultation effectues (le code patient est choisi
dans un comboBox) ; (3pts)
7- raliser un tat semblable ltat de la question 6, mais on ajoutant le total payer
pour cette ordonnance ; (3pts)
8- Dtacher la base de donnes ; fermer toutes les applications et compresser votre
dossier de travail avec un outil de compression(winzip, winrar)

BENTALEB MOHAMED

Page 129

OFPPT TDI

TRAVAUX PRATIQUES
Etude de cas 12

Enonc :
Une entreprise fait la location de matriel ses clients ; la location porte sur une dure
exprime en jours ; toute location donne lieu un contrat entre lentreprise et le client. On
utilise pour cela la base de donnes LOCATION sous Sql server et les traitements sous
Visual studio .net :
-Table Clients (codeCl, nomCl, adresse)
-Table Materiels (ref, designation, prixLocation)
-Table Contrats (numContrat, dateContrat, codeCl)
-Table LigneContrat (numContrat, ref, QuantitLoue)
1- crer la base de donnes sur le serveur Sql server ; (3pts)
2- crer une feuille MDI pour laccs aux feuilles qui suivent ; (2pts)
3- raliser le formulaire de gestion des clients : ajout, modification, suppression ; (3pts)
4- raliser le formulaire pour lajout dune ligne contrat : le numContrat et le champs Ref
doivent tre choisis dans des contrles comboBox ; (3pts)
5- ajouter une grille qui affiche tous les enregistrements de la table ligneContrat ; (3pts)
6- ajouter, en bas de la grille, une zone de texte qui calcule la somme du champ
QuantitLoue ; (3pts)
7- raliser un tat qui imprime les contrats effectus durant lanne 2005 regroups par
client ; (3pts)
8- Dtacher la base de donnes ; fermer toutes les applications et compresser votre
dossier de travail avec un outil de compression (winzip, winrar)

Etude de cas 13

Enonc :
Soit le modle relationnel suivant :

BENTALEB MOHAMED

Page 130

OFPPT TDI

TRAVAUX PRATIQUES

SYNDICAT (CodeSyndicat, NomSyndicat, AdresseSyndicat, TlphoneSyndicat)


CAMION (NoImmatriculation, NomPropritaire)
TYPE_DECHET (CodeType, LibellType)
PESEE (CodeBordereauPese, DatePese, Heure, PoidsArrive, PoidsDpart,
CodeType#, NoImmatriculation#, CodeSyndicat#)
LIMITATION (NoImmatriculation, CodeType, CapacitMaximale)
Remarques :

NomPropritaire contient le nom de lentreprise ou de la rgie


communale qui appartient le camion.
LibellType prend les valeurs : Verre , Papiers-cartons ou
Plastiques-mtaux .
La diffrence PoidsArrive PoidsDpart permet de connatre le
poids du dpt ; ce poids est exprim en tonnes.
CapacitMaximale est le poids maximal que le camion est
autoris transporter pour chaque type de dchet.

BENTALEB MOHAMED

Page 131

OFPPT TDI

TRAVAUX PRATIQUES

5. Crer la base de donnes


6. Crer deux enregistrements par table
7. Crer une application MDI avec menu qui permet dexcuter
les traitements suivants :
8. Mise jour de la table SYNDICAT. Prvoir les boutons : Ajouter, Modifier,
Enregistrer, Supprimer, Fermer et des boutons de dplacement entre les
enregistrements.
9. Mise jour de la table LIMITATION. Prvoir les boutons : Ajouter,
Modifier, Enregistrer, Supprimer, Fermer et des boutons de dplacement
entre les enregistrements. (chaque cl trangre sera choisie partir
dune liste modifiable)
Crer un formulaire qui affiche, pour un propritaire choisis dans
un combo box, la liste des voitures quil possde

Etude de cas 14

Enonc :
Le grant dune socit de commercialisation des pices lectroniques souhaite dvelopper
une application pour grer les ventes, pour cela, il a fait appel un dveloppeur en free lance
pour concevoir et mettre en uvre ce nouveau systme.
Le Dveloppeur a propos le schma relationnel suivant :

Clients(NClient, Nom, Prnom, Titre, Adresse, CodePostal, Ville,


Tlphone)
Factures(NFacture, NClient, DateFacture, Remarques)
DtailsFacture(NFacture, RefProduit, Quantit, Remise)
Produits(RefProduit, Description, Catgorie, PrixVente)
Travail faire :
1. Crer la base de donnes sous SQL SERVER (2 Pts)
2. Faire quelques enregistrements pour le test
BENTALEB MOHAMED

Page 132

OFPPT TDI

TRAVAUX PRATIQUES

3. Crer une interface de mise jour des clients (2 Pts)


a. Ajout (le contrle de saisie est obligatoire et confirmation dajout)
b. Modification
c. Suppression
d. Boutons de navigation
4. Crer une interface de mise jour des produits (2 Pts)
5. Crer une interface de mise jour des factures et Dtails Facture (2Pts)
6. Crer une feuille de recherche :
a. Recherche client (Afficher les informations relatives un client) (2 Pts)
b. Recherche facture :
i. Avec le NFacture (Afficher les dtails dune facture) (2 Pts)
ii. Par date (Afficher la liste des factures enregistres cette date) (2 Pts)
iii. Entre deux dates (Afficher la liste des factures enregistres entre deux
dates) (2 Pts)
7. Crer un tat pour imprimer une facture avec les dtails et le montant de la facture (2
Pts)
8. Crer un tat permettant de lister les factures entre deux dates (2 Pts)

Etude de cas 15

Enonc :
Le centre cinmatographique Marocain souhaite grer la diffusion des films dans les salles
des cinmas de notre pays. Le Directeur du centre a fait appel un dveloppeur en free lance
pour concevoir et mettre en uvre le systme.
Le dveloppeur a propos le modle relationnel suivant :

Cinma (NumCinma, NomCinma, RueCinma, CodePostal)


Ville (CodePostal, NomVille).
BENTALEB MOHAMED

Page 133

OFPPT TDI

TRAVAUX PRATIQUES

Salle (NumSalle, Capacit, NumCinma).


Film (NumFilm, Titre, Dure, Producteur).
Projection (NumFilm, NumSalle, Date, NbreEntres).
Travail faire :
1. Crer la base de donnes sous SQL SERVER (2 Pts)
2. Faire quelques enregistrements pour le test
3. Crer une interface de mise jour des cinmas (2 Pts)
a. Ajout (le contrle de saisie est obligatoire et confirmation dajout)
b. Modification
c. Suppression
d. Boutons de navigation
4. Crer une interface de mise jour des villes et Salle (2 Pts)
5. Crer une interface de mise jour des Films et Projection (2 Pts)
6. Crer une feuille de recherche :
a. Recherche Cinma (Afficher les informations relatives au cinma recherch)
(2 Pts)
b. Recherche Film :
i. Par titre (Afficher les dtails dun Film) (1 Pts)
ii. Par date de projection (1 Pts)
iii. Entre deux dates (Afficher la liste des films entre deux dates) (2 Pts)
7. Crer un tat pour imprimer la liste des projections (2 Pts)
8. Crer un tat permettant dafficher le nombre de places vendues par projection (2 Pts)
9. Ajouter dans un graphe pour afficher le nombre dentres par film (2 Pts)

Etude de cas 16

Enonc :
BENTALEB MOHAMED

Page 134

OFPPT TDI

TRAVAUX PRATIQUES

Soit dvelopper une application pour la gestion des notes des tudiants

Cours (NumCours, NumSalle , MatriculeProfesseur, Titre, Coef).


Etudiant (CodeEtudiant, Nom, Prenom, Date_naiss).
Professeur (MatriculeProfesseur,Nom,Prenom).
Examen (CodeEtudiant, NumCours, Date, Note).
Travail faire :
1. Crer la base de donnes sous SQL SERVER (2 Pts)
2. Faire quelques enregistrements pour le test

(1 Pts)

3. Crer une interface de mise jour des tudiants (2 Pts)


a. Ajout (le contrle de saisie est obligatoire et confirmation dajout)
b. Modification
c. Suppression
d. Boutons de navigation
4. Crer une interface de mise jour des Professeurs (2 Pts)
5. Crer une interface de mise jour des Cours et Examens (2 Pts)
6. Crer une feuille de recherche :
a. Recherche tudiant (Afficher les informations relatives un tudiant) (2 Pts)
b. Recherche Examen :
i. Par numro dtudiant pour afficher ces notes (2 Pts)
7. Crer un tat pour imprimer le PV des notes par cours (2 Pts)
8. Crer un tat permettant de lister les notes dun tudiant donn avec sa moyenne
(2Pts)
9. Crer un tat permettant daffiche le bulletin dun tudiant donn avec sa moyenne
(3 Pts)

Etude de cas 17
BENTALEB MOHAMED

Page 135

OFPPT TDI

TRAVAUX PRATIQUES

Enonc :
Le complexe de formation CFPX souhaite informatiser la gestion de son parc PC, il dispose
de plusieurs centres de formation.
Le directeur du complexe fait appel vous pour dvelopper ce systme, pour cela on vous
propose le modle relationnel suivant :
CENTRES( IdCentre, Titre, Capacite_accueil, dateCreation)
SALLE(CodeSalle, NomSalle, IdCentre)
ORDINATEURS(Numordinateur, Date achat, Capacit Ram, Capacit disque dur, vitesse,
NumSalle, NumCentre)
LOGICIELS(RefLogiciel, Nom logiciel, Version, Rle, NumOrdinateur, Licence)
Travail faire :
1. Crer la base de donnes sous SQL SERVER (2 Pts)
2. Faire quelques enregistrements pour le test
3. Crer une interface de mise jour des Centre (2 Pts)
a. Ajout (le contrle de saisie est obligatoire et confirmation dajout)
b. Modification
c. Suppression
d. Boutons de navigation
4. Crer une interface de mise jour des Salle (2 Pts)
5. Crer une interface de mise jour des Ordinateurs et Logiciels (2 Pts)
6. Crer une feuille de recherche :
a. Recherche Ordinateur (Afficher les informations relatives un ordinateur)
(2 Pts)
b. Recherche Logiciel :
i. Par numro ou nom de logiciel (2 Pts)
7. Crer un tat pour afficher linventaire pour chaque centre et afficher le nombre total
des ordinateurs (3 Pts)
8. Crer un tat permettant de lister les logiciels installs pour un ordinateur donn (2Pts)
BENTALEB MOHAMED

Page 136

OFPPT TDI

TRAVAUX PRATIQUES

9. Crer un tat pour lister les ordinateurs de chaque salle de formation (3Pts)

Etude de cas 18

Enonc :
Soit le modle relationnel suivant :
expert
ExpertId
nomExpert
prenomExpert
Tel

accomplir
numrapport
NumExpertise
ExpertId
DateDepot

expertise
NumExpertise
Datejugement
Frais
DossierId

Fax
Adresse
Email
GSM

designer
jugeid
expertid
DossierID

juge

datedesignation

dossier
DossierId

jugeid

Designation

nomjuge

dateD_Audiance

prenomjuge

BENTALEB MOHAMED

Page 137

OFPPT TDI

TRAVAUX PRATIQUES

Travail demand :
1. Crer la base de donnes (2points)
2. Ajouter trois enregistrements pour chaque table (2points)
3. Crer un menu pour cette application (2points)
4. Crer une classe Expert contenant toutes les proprits de cette classe (1point)
5. Crer une classe GestionExpert ayant les mthodes publiques suivantes : (2points)
a. Public Sub ajouter(ByVal obj As Expert)
b. Public Sub modifier(ByVal obj As Expert)
c. Public Sub supprimer(ByVal obj As Expert)
d. Public Function rechercher(ByVal num As Integer) As Expert
e. Dfinir les attributs et les mthodes

qui vous serons utiles pour

accomplir cette tche.

6.

Crer un formulaire permettant lajout, la modification et la suppression dun Expert.


Le formulaire doit contenir un bouton de recherche sur le code Expert en utilisant les
classes Expert et GestionExpert (2points)

7. Crer un formulaire permettant la mise jour de la table Accomplir. Toutes les cls
trangres doivent tre remplies partir dune liste (2points)
8. Crer un formulaire qui affiche pour un expert donn la liste des dossiers pour lesquels
il a accompli une expertise (1point)
9. Crer un formulaire contenant une grille et affichant tous les dossiers. A ct de
chaque dossier une case cocher qui va marquer les dossiers supprimer. Un bouton
supprimer permettra de supprimer tous les dossiers cochs (1point)
10. Crer un tat affichant la liste les dossiers (1.5points)
11. Crer un tat affichant les experts dsigns entre deux dates (1.5points)
12. Dployer votre application. (2points)

BENTALEB MOHAMED

Page 138

OFPPT TDI

TRAVAUX PRATIQUES

Etude de cas 19

Enonc :
Une comptition culturelle est organise entre tablissements. Un stagiaire va passer des
preuves et chaque preuve on lui affectera une note de manire pouvoir calculer la fin
sa moyenne.
Sur un serveur SQL Server ServeurCentral, nous avons cr la base de donnes Comptition
qui a la structure suivante :
o
Stagiaire (NumSta, NomSta, PrnomSta, DateNaissanceSta, NumFil, NumEta)
o
Etablissement (NumEta, NomEta, NumReg)
o
Rgion (Numreg, NomReg)
o
Epreuve (NumEpr, NomEpr, CoefficientEpr,DateEpreuve)
o
Rsultat (NumSta, NumEpr, Note)
o
Filire (NumFil, NomFil)
Travail demand
1. Crer la base de donnes (2Pts)
2. Ajouter trois enregistrements pour chaque table (1Pt)
3. Crer un formulaire pour mettre jour la table Etablissement. (2Pts)
Prvoir les boutons : Ajouter, Modifier, Enregistrer, Supprimer, Fermer et des boutons de
navigation entre les enregistrements.
4. Crer une classe Stagiaire contenant toutes les proprits de cette classe (1Pt)
5. Crer une classe DAOStagiaire ayant les mthodes publiques suivantes : (2Pts)
Stagiaire)
modifier(ByVal obj As Stagiaire)
supprimer(ByVal obj As Stagiaire)

a. Public Sub ajouter(ByVal obj As


b. Public Sub
c. Public Sub

d. Public Function rechercher(ByVal num As Integer) As Stagiaire


e. Dfinir les attributs et les mthodes qui vous serons utiles pour
accomplir cette tche.

6. Crer un formulaire pour mettre jour la table Stagiaire en utilisant les deux classes
prcdemment Cres : Stagiaire et DAOStagiaire. (2 Pts)
Prvoir les boutons : Ajouter, Modifier, Enregistrer, Supprimer, Fermer .

BENTALEB MOHAMED

Page 139

OFPPT TDI

TRAVAUX PRATIQUES

7. Crer un formulaire qui affiche la table Epreuve dans une grille et ajouter un bouton qui
supprime toutes les preuves slectionnes. (2 Pts)
8. Mise jour de la table Rsultat. Prvoir les boutons : Ajouter, Modifier et Enregistrer.
(Utiliser un objet DatagridView pour effectuer cette opration) (2Pt)
9. Crer une feuille de recherche qui affiche :
9.1. Pour une Rgion donne tous les tablissements de cette dernire. (1Pt)
9.2. Pour une filire donne, tous les stagiaires qui ont une Moyenne suprieure 13.
(1Pt)
10. Crer un formulaire contenant une grille qui affiche la liste des stagiaires qui nont pas eu
la moyenne. (1Pt)
11. Crer ltat qui affiche pour une Filire donne les Stagiaire de cette dernire (1Pt)
12. Crer une feuille MDI avec menu un menu de navigation (1Pt)
13. Crer le dploiement de votre application (1Pt)

Etude de cas 20

Enonc :
Un Organisme de formation dsire grer les stages de formation de ces stagiaires, il a fait
appel un dveloppeur en free lance pour concevoir et mettre en uvre ce nouveau systme.
Le Dveloppeur a propos le schma relationnel suivant :

BENTALEB MOHAMED

Page 140

OFPPT TDI

BENTALEB MOHAMED

TRAVAUX PRATIQUES

Page 141

OFPPT TDI

TRAVAUX PRATIQUES

Travail faire :
1. Crer la base de donnes sous SQL SERVER (4 Pts)
2. Faire quelques enregistrements pour le test
3. Crer une interface de mise jour des Stagiaires (2 Pts)
a. Ajout (le contrle de saisie est obligatoire et confirmation dajout)
b. Modification
c. Suppression
d. Boutons de navigation
4. Crer une interface de mise jour des Professeurs permettant de lister tous les
enregistrements de la tables professeur dans une grille
linterface doit contenir galement un bouton Filter qui permet dafficher et de
masquer un cadre qui contient trois boutons doptions : Tous, Commenant Par, Se
terminant Par et une zone de texte qui contient le critre sur le champ NomProf
(2 Pts)
5. Crer une interface qui affiche, pour un stage donn, les modules de ce stage (2Pts)
6. Crer une feuille de recherche :
a. Recherche Prestation :
i. Avec le NumPrestation (Afficher les informations de la Prestation)

(2

Pts)
ii. Par date dbut (Afficher la liste des Prestations enregistres cette
date) (2 Pts)
iii. Entre deux dates de dbut (Afficher la liste des Prestations enregistres
entre deux dates) (2 Pts)
7. Crer un tat pour imprimer la liste les Prestations (2 Pts)
8. Crer un tat permettant de lister les Prestations entre deux dates (2 Pts)

BENTALEB MOHAMED

Page 142

OFPPT TDI

TRAVAUX PRATIQUES

Etude de cas 20

Enonc :
Les lections lgislatives au Maroc se droulent selon un dcoupage en
circonscriptions lectorales. Une province ou prfecture contient une ou plusieurs
circonscriptions lectorales ; une rgion contient plusieurs provinces et/ ou
prfectures. Un candidat appartient un seul parti politique et reprsente une seule
circonscription lectorale. Les lecteurs votent dans la circonscription lectorale o
ils sont inscrits. Une application de gestion des lections lgislatives utilise la base
de donnes suivante :
N.B. Les champs marqus en gras et souligns reprsentent les cls primaires
des tables et les champs marqus par # reprsentent les cls trangres.
Region (idRegion, nomRegion)
ProvincePrefecture (idProvPref, nomProvPref, #idRegion)
Circonscription (idCirconscription, nomCir, NombreSiege, #idProvPref)
Parti (idParti, nomParti)
Candidat (CINcandidat, nomCandidat, prenomCandidat, DateNC,
adrCandidat, #idCirconscription,# idParti)
Electeur (CINelecteur, nomElecteur, prenElecteur, dateNE, adrElecteur,#
idCirconscription)

BENTALEB MOHAMED

Page 143

OFPPT TDI

TRAVAUX PRATIQUES

-Structure des tables :


Table Region
Colonne
idRegion

Type
Entier

nomRegion

Alphabtique

Colonne
idProvPref
nomProvPref
idRegion

Colonne
idCirconscription
nomCir
NombreSiege
idProvPref

Colonne
idParti
nomParti

Signification
Identifiant (code) dune
rgion
Nom de la rgion

Table ProvincePrefecture
Type
Signification
Entier
Identifiant de la
province/prefecture
Alphabtique
Nom de la
province/prefecture
Entier
Identifiant de la rgion

Table Circonscription
Type
Signification
Entier
Identifiant de la
circonscription
Alphabtique
Nom de la circonscription
Entier
Nombre de siges affects
la circonscription
Entier
Identifiant de la
province/prefecture
Table Parti
Type
Entier
Alphabtique

Signification
Identifiant du Parti
Nom du Parti

Table Candidat
Colonne
CINcandidat

Type
Alphanumrique

nomCandidat
prenomCandidat
DateNC

Alphabtique
Alphabtique
Date

adrCandidat
idCirconscription

Alphanumrique
Entier

idParti

Entier

BENTALEB MOHAMED

Signification
Ncarte nationale du
candidat
Nom du candidat
Prnom du candidat
Date de naissance du
candidat
Adresse du candidat
Identifiant de la
circonscription
Identifiant du Parti
Page 144

OFPPT TDI

TRAVAUX PRATIQUES
Table Electeur

Colonne
CINelecteur

Type
Alphanumrique

nomElecteur
prenElecteur
dateNE

Alphabtique
Alphabtique
Date

adrElecteur
idCirconscription

Alphanumrique
Entier

Signification
N de la carte nationale
de llecteur
Nom de llecteur
Prnom de llecteur
Date de naissance de
llecteur
Adresse de llecteur
Identifiant de la
circonscription

Travail faire :
Enregistrer sur un fichier texte qui porte le nom dossier1.txt les requtes SQL qui
rpondent aux questions suivantes.
Donner les requtes qui permettent de :
7) Crer la base de donnes et remplir les tables par un jeu dessai.

(1 pt)

8) Crer une procdure stocke qui affiche la liste des candidats qui
reprsentent une circonscription donne comme paramtre et appartenant
un parti donn comme paramtre. (1 pt) (Le code de la procdure doit tre
sauvegard dans le fichier dossier1.txt)
9) Crer une procdure stocke qui affiche le nombre dlecteurs inscrits dans
chaque province dune rgion donne (idRegion transmis en paramtre). (1
pt)
10)Crer une procdure stocke qui affiche les partis politiques qui ne participent
pas dans une circonscription donne. (1 pt)
11)Crer un trigger qui empche lajout dune circonscription avec une valeur de
la colonne NombreSiege infrieure 0 ou suprieure 6. (1 pt)
12)Crer un trigger, qui lors de lajout dun candidat la table candidat, ajoute
galement ce candidat la table Electeur : en effet un candidat est aussi un
lecteur qui va voter dans la mme circonscription. (1 pt)
Dossier 2 (7 pts)
Crer une application client/serveur qui se base sur la base de donnes du
dossier 1 permettant dassurer les fonctionnalits suivantes :
7. Crer un menu pour cette application permettant de raliser les oprations
demandes par les questions qui suivent. (0,25 pt)
8. Crer un formulaire de mise jour des circonscriptions avec les lments
suivants : (1,25 pt)
BENTALEB MOHAMED

Page 145

OFPPT TDI

TRAVAUX PRATIQUES

Des boutons de navigation.


Les boutons Ajouter, Modifier, Supprimer et Enregistrer.
La province est choisie dans une liste droulante.
9. a- Crer un formulaire contenant une grille qui affiche la liste des partis dune
circonscription avec, pour chaque parti, le nombre total de candidats
enregistrs ; la circonscription est choisie dans une liste droulante. (1 pt)
b- Ajouter ct de chaque parti une case cocher. Ajouter en bas de la
grille, un bouton de commande qui permet de supprimer le ou les partis
slectionns avec tous les enregistrements connexes. (1 pt)
10. Crer un formulaire permettant dafficher la liste des candidats dune
circonscription pour un parti donn ; la circonscription ainsi que le parti sont
choisis dans deux listes droulantes. (1,5pt)
11. Crer un tat qui imprime les circonscriptions de la rgion GRANDCASABLANCA avec les informations : nom de la circonscription, nombre de
siges affects. (1 pt)
12. Crer un tat graphique de type secteur montrant pour chaque rgion, le
nombre dlecteurs. (1 pt)

BENTALEB MOHAMED

Page 146

OFPPT TDI

TRAVAUX PRATIQUES

Une socit compte dvelopper une application de gestion de son parc vhicule ;
elle consiste grer les vhicules, les conducteurs, les diffrents entretiens,
lassurance, suivre les dpenses qui sont spcifiques un vhicule prcis pour
dterminer sa rentabilit, lhistorique des pannes et des accidents concernant un
vhicule. Lapplication permet aussi de dterminer les vhicules dont lassurance est
sur le point dexpirer. Lapplication utilise la base de donnes base sur le modle
suivant :
N.B. Les champs marqus en gras et souligns reprsentent les cls primaires
des tables et les champs marqus par # reprsentent les cls trangres.
Vehicule (immat, marque, modele, puissance, carburant, dateAchat,
compteur, #idconducteur)
Conducteur (idconducteur, nomC, prenC, dateN, pass)
HistoConducteur (idHC, #immat, #idconducteur, dateDebut, dateFin)
AssVehicule (idAss, nomAssureur, dateAss, dateExpiration, #immat, montant)
Panne (idPanne, datePanne, dateReprise,descPanne, kilometrage, # immat)
Accident (idAccident, dateAccident, note, # immat)

BENTALEB MOHAMED

Page 147

OFPPT TDI

TRAVAUX PRATIQUES

-Structure des tables :


Table Vehicule
Colonne
immat

Type
Alphanumrique

marque
modele
puissance
carburant

Alphabtique
Alphanumrique
Entier
Alphabtique

dateAchat
compteur

Date
Entier

#idConducteur

Entier

Colonne
idConducteur
nomC
prenC
dateN

Table Conducteur
Type
Entier
Alphabtique
Alphabtique
Date

pass

Alphanumrique

Signification
Ndimmatriculation du
vhicule
Marque du vhicule
Modle du vhicule
Puissance du vhicule
Carburant du
vhicule :Essence, Diesel
Date achat du vhicule
La valeur actuelle du
compteur du vhicule en km
Conducteur actuel du
vhicule

Signification
Identifiant du conducteur
Nom du conducteur
Prnom du conducteur
Date de naissance du
conducteur
Mot de passe du conducteur

dateFin

Table HistoConducteur
Type
Signification
Entier
Identifiant de lhistorique
des conducteurs du
vhicule
Alphanumrique
Nimmatriculation du
vhicule
Entier
Identifiant du conducteur
Date
Date dbut conduite
vhicule
Date
Date fin conduite vhicule

Colonne

Table AssVehicule
Type

Colonne
idHC

immat
idConducteur
dateDebut

BENTALEB MOHAMED

Signification
Page 148

OFPPT TDI

TRAVAUX PRATIQUES

idAss
nomAssureur
dateAss

Entier
Alphabtique
Date

dateExpiration

Date

immat

Alphanumrique

montant

Rel

Identifiant de lassurance
Nom de lassureur
Date de lassurance du
vhicule
Date dexpiration de
lassurance du vhicule
Nimmatriculation du
vhicule
Montant de lassurance

Table Accident
Colonne
idAccident
dateAccident
note
immat

Type
Entier
Alphabtique
Alphabtique
Alphanumrique

Signification
Identifiant de laccident
Date de laccident
Description de laccident
Nimmatriculation du
vhicule

Table Panne
Colonne
idPanne
descPanne
datePanne
dateReprise

Type
Entier
Alphabtique
Date
Date

Kilometrage

Entier

immat

Entier

Signification
Identifiant de la panne
Description de la panne
Date de la panne
Date de reprise aprs
panne
Valeur du compteur du
vhicule au moment de
la panne
Nimmatriculation du
vhicule

La table histoConducteur permet de garder lhistorique des conducteurs de chaque


vhicule avec les dates de dbut et de fin de conduite du vhicule.
Travail faire :
Enregistrer sur un fichier texte qui porte le nom dossier1.txt les requtes SQL qui
rpondent aux questions suivantes :
Donner les requtes qui permettent de :
13)Crer la base de donnes et remplir les tables par un jeu dessai. (1 pt)
14)Crer une procdure stocke qui affiche la liste des vhicules achets avant
une date donne comme paramtre. (1 pt) (Le code de la procdure doit tre
sauvegard dans le fichier dossier1.txt)
15)Crer une procdure stocke qui affiche les vhicules dont lassurance
expirera dans N jours ; avec N un nombre entier utilis comme paramtre. (1
pt)

BENTALEB MOHAMED

Page 149

OFPPT TDI

TRAVAUX PRATIQUES

16)Crer une procdure stocke qui affiche, pour un vhicule donn comme
paramtre, la liste des pannes qui sont produites durant lanne 2011. Prvoir
dans le jeu dessai, des lignes dans la table Panne avec des dates comprises
dans lanne 2011. (1 pt)
17)Crer un trigger qui refuse lajout dune panne avec une valeur de la colonne
kilometrage infrieure la valeur de la colonne compteur de la table
Vehicule. (1 pt)
18)Pour tenir jour lhistorique des conducteurs dun vhicule, crer un trigger,
qui chaque modification du conducteur dans la table Vehicule, ajoute une
ligne la table HistoConducteur avec des donnes correspondantes au
vhicule et au nouveau conducteur du vhicule ; la colonne dateDebut prend
la date systme et la colonne dateFin reste nulle. (1 pt)
Dossier 2 (7 pts)
Crer une application client/serveur qui se base sur la base de donnes du
dossier 1 permettant dassurer les fonctionnalits suivantes :
13. Crer un menu pour cette application permettant de raliser les oprations
demandes par les questions qui suivent. (0,25 pt)
14. Crer un formulaire de mise jour des pannes avec les lments suivants :
(1,25 pt)
Des boutons de navigation.
Les boutons Ajouter, Modifier, Supprimer et Enregistrer.
Le vhicule est choisi dans une liste droulante.
15. a- Crer un formulaire contenant une grille qui affiche lhistorique des
conducteurs dun vhicule donn; la grille affiche le nom et le prnom des
conducteurs, la date dbut et la date fin de conduite du vhicule. Le vhicule
est choisi dans une liste droulante. (1 pt)
b- Ajouter ct de chaque conducteur une case cocher. Ajouter en bas de
la grille, un bouton de commande qui permet de supprimer le ou les
conducteurs slectionns avec tous les enregistrements connexes. (1 pt)
16. Crer un formulaire permettant dafficher la liste des vhicules ayant fait des
accidents entre deux dates donnes ; les dates doivent tre saisies dans deux
zones de textes. (1 pt)
17. Crer un tat graphique de type secteur qui imprime le nombre de vhicules
par marque du parc. (1 pt)
18. Crer un tat qui imprime lensemble des vhicules avec les informations :
nom de la marque, le modle, le n du matricule, ainsi quun champ qui
donne le rendement du vhicule ; le rendement dun vhicule est
calcul comme suit : le nombre total des jours de pannes du vhicule divis
par le nombre total de jours couls depuis lachat du vhicule. (1,5 pt)
BENTALEB MOHAMED

Page 150

OFPPT TDI

BENTALEB MOHAMED

TRAVAUX PRATIQUES

Page 151