Chinese (People's Republic of China)  English  Français


Supinfo-Projects.com
Tous les projets des élèves ingénieurs de Supinfo



Projets
  Dernier Projet
  Les plus populaires
  Tous les Projets

102 Visiteurs
3168 Projets


My Supinfo-Projects

   Connectez-vous
   Créez un Compte


Synopsis

   929 Visites
   Note INTERNET : 10.3
    (11 Votants)
   0 Commentaires

   Lire l'article

Evaluez cet article

20
18
16
14
12
10
8
6
4
2
0


Commentez cet article

Auteur :

Email :

Votre commentaire :



 
2004 - Note de Synthèse Stage
Programmer en C# avec ADO.NET
[15 mn de lecture - paru le 11/3/2003 - Public : Débutant]

Auteur

pottie_jJulien POTTIER
Elève-Ingénieur Supinfo Paris
Promotion SUPINFO 2004

   Lui écrire
   Tous les projets de cet auteur
   Le mini-CV de cet auteur

3. Exemple d'application

Voici un exemple simple d'un windowsform utilisant ADO.NET pour communiquer avec une base de données SQLServer 2000.

Cette application récupère une liste de noms d'agence contenue par la table agence de la base de données dbsepe. Lorsque l'utilisateur sélectionne une agence toutes les infos se rapportant à cette dernière sont affichées. A partir de là on peut mettre à jour ses informations ou bien tout simplement la supprimer. Voyons en pratique comment cela fonctionne.

Étape 1 :

On va inclure dans notre WindowsForm les noms d'espace System.Data, et System.Data.SqlClient pour pouvoir utiliser les classes d'ADO.NET (SqlDataAdapter, DataSet, SqlCommand, SqlConnection ...) :

using System.Data;
//managed provider pour SqlServer ver 7+
using System.Data.SqlClient;

Étape 2:

On intancie un objet sqlConnection1 de class SqlConnection qui permet de se connecter à la base de donnée dbsepe, dans mon exemple j'utilise un fichier de configuration  App.config(namespace System.Configuration)qui va contenir les paramètres de ma ConnectionString. Cela me permet d'éditer les paramètres de connection sans avoir à modifier le code source à chaque fois.

//Infos dans le fichier App.config
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<appSettings>
<add key="connectionString" value="workstation id=localhost; packet size=4096;user id=MidGard;integrated security=SSPI; data source=localhost;persist security info=False; initial catalog=dbsepe"/>
</appSettings>
</configuration>

//Intanciation de l'objet sqlConnection1
private SqlConnection sqlConnection1 = new SqlConnection(ConfigurationSettings.AppSettings["connectionString"]);

Étape 3:

On créer 2 fonctions AgenceLoad() et PaysLoad() qui vont peupler les 2 comboboxes, Liste Agence(cbAgence) et Pays(cbPays) à partir des données des tables Agence et Pays. Les arguments "getagence" et "getpays" sont les noms de 2 procédures stockées, "getagence" fourni l'identifiant ainsi que le nom de chacune des agences , idem pour "getpays"    :

private void AgenceLoad()
{
try
{
SqlCommand oCommand = new SqlCommand("getagence",sqlConnection1);
oCommand.CommandType = CommandType.StoredProcedure;
SqlDataAdapter oSqlDataAdapter = new SqlDataAdapter(oCommand);
DataSet dsAgence = new DataSet();
oSqlDataAdapter.Fill(dsAgence,"agence");

cbAgence.DataSource=dsAgence.Tables["agence"];
cbAgence.DisplayMember="nom_agence";
cbAgence.ValueMember="id_agence";
}
catch(Exception ex)
{
MessageBox.Show(ex.Message);
}
}

private void PaysLoad()
{
try
{
SqlCommand oCommand = new SqlCommand("getpays",sqlConnection1);
oCommand.CommandType = CommandType.StoredProcedure;
SqlDataAdapter oSqlDataAdapter = new SqlDataAdapter(oCommand);
DataSet dsPays = new DataSet();
oSqlDataAdapter.Fill(dsPays,"pays");

cbPays.DataSource=dsPays.Tables["pays"];
cbPays.DisplayMember="nom_pays";
cbPays.ValueMember="id_pays";

}
catch(Exception ex)
{
MessageBox.Show(ex.Message);
}
}

//Il ne faut pas oublier de faire appel à ces fonctions
//au moment du chargement du formulaire via l'évenement Load

private void EditAgenceForm_Load(object sender, System.EventArgs e)
{
AgenceLoad();
PaysLoad();

ShowAgence(); //détaillé dans l'étape suivante
}

Étape 4 :

Une fois que l'on a peuplé nos comboboxes on veut pouvoir afficher les informations d'une agence, pour cela on va utiliser l'événement SelectedIndexChanged de cbAgence ainsi que la fonction ShowAgence():

private void ShowAgence()
{
int iIdagence = 0;
if (cbAgence.SelectedValue.ToString() != "System.Data.DataRowView")
{
iIdagence = Convert.ToInt32(cbAgence.SelectedValue);
}

try
{
//la procédure stockée getagenceinfos prend 1 argument: id_agence
//retourne tt les infos de l'agence correspondant à id_agence

SqlCommand oCommand = new SqlCommand("getagenceinfos",sqlConnection1);
oCommand.CommandType = CommandType.StoredProcedure;

oCommand.Parameters.Add("@id_agence",SqlDbType.Int,4);
oCommand.Parameters["@id_agence"].Value = iIdagence; ;

SqlDataAdapter oSqlDataAdapter = new SqlDataAdapter(oCommand);
               
DataSet dsAgence = new DataSet();

oSqlDataAdapter.Fill(dsAgence,"agence");

if (dsAgence.Tables["agence"].Rows.Count>0)
{
tbNom.Text=dsAgence.Tables["agence"].Rows[0]["nom_agence"].ToString();

tbAdresse1.Text=dsAgence.Tables["agence"].Rows[0]["adresse1"].ToString();
tbAdresse2.Text=dsAgence.Tables["agence"].Rows[0]["adresse2"].ToString();
tbCode_postal.Text=dsAgence.Tables["agence"].Rows[0]["code_postal"].ToString();
tbVille.Text=dsAgence.Tables["agence"].Rows[0]["ville"].ToString();
cbPays.SelectedValue=dsAgence.Tables["agence"].Rows[0]["id_pays"];
tbTel1.Text=dsAgence.Tables["agence"].Rows[0]["tel1"].ToString();
tbEmail.Text=dsAgence.Tables["agence"].Rows[0]["email"].ToString();
tbFax.Text=dsAgence.Tables["agence"].Rows[0]["fax"].ToString();
tbContact1.Text=dsAgence.Tables["agence"].Rows[0]["contact1"].ToString();
tbContact2.Text=dsAgence.Tables["agence"].Rows[0]["contact2"].ToString();
tbObs1.Text=dsAgence.Tables["agence"].Rows[0]["obs1"].ToString();
tbObs2.Text=dsAgence.Tables["agence"].Rows[0]["obs2"].ToString();
}

}
catch(Exception ex)
{
MessageBox.Show(ex.Message);
}

}

//lorsque l'utilisateur choisi un nom d'agence via la combobox agence
//la fonction ShowAgence est appelée

private void cbAgence_SelectedIndexChanged(object sender, System.EventArgs e)
{
ShowAgence();
}

Étape 5 :

Après avoir vu comment afficher les données d'une base, on va voir comment les modifier ou les supprimer, pour cela on va créer les fonctions AgenceUpdate() et AgenceDelete() :

private void AgenceUpdate()
{
//Affiche une boite de dialogue pour confirmation
DialogResult oReponse=MessageBox.Show("Voulez-vous modifer cette agence ?", "Confirmation!", MessageBoxButtons.YesNo, MessageBoxIcon.Asterisk);

if (oReponse.Equals(DialogResult.Yes))
{

try
{
//la procédure stockée editagence fait un update sur la table agence
SqlCommand oCommand = new SqlCommand("editagence",sqlConnection1);
oCommand.CommandType = CommandType.StoredProcedure;

oCommand.Parameters.Add("@id_agence",SqlDbType.Int,4);
oCommand.Parameters.Add("@nom_agence",SqlDbType.NVarChar,50);
oCommand.Parameters.Add("@adresse1",SqlDbType.NVarChar,100);
oCommand.Parameters.Add("@adresse2",SqlDbType.NVarChar,100);
oCommand.Parameters.Add("@code_postal",SqlDbType.NVarChar,50);
oCommand.Parameters.Add("@ville",SqlDbType.NVarChar,50);
oCommand.Parameters.Add("@id_pays",SqlDbType.Int,4);
oCommand.Parameters.Add("@tel1",SqlDbType.NVarChar,50);
oCommand.Parameters.Add("@email",SqlDbType.NVarChar,50);
oCommand.Parameters.Add("@fax",SqlDbType.NVarChar,50);
oCommand.Parameters.Add("@contact1",SqlDbType.NVarChar,50);
oCommand.Parameters.Add("@contact2",SqlDbType.NVarChar,50);
oCommand.Parameters.Add("@obs1",SqlDbType.NVarChar,50);
oCommand.Parameters.Add("@obs2",SqlDbType.NVarChar,50);

oCommand.Parameters["@id_agence"].Value=cbAgence.SelectedValue;
oCommand.Parameters["@nom_agence"].Value= tbNom.Text;
oCommand.Parameters["@adresse1"].Value=tbAdresse1.Text;
oCommand.Parameters["@adresse2"].Value=tbAdresse2.Text;
oCommand.Parameters["@code_postal"].Value=tbCode_postal.Text;
oCommand.Parameters["@ville"].Value=tbVille.Text;
oCommand.Parameters["@id_pays"].Value=cbPays.SelectedValue;
oCommand.Parameters["@tel1"].Value=tbTel1.Text;
oCommand.Parameters["@email"].Value=tbEmail.Text;
oCommand.Parameters["@fax"].Value=tbFax.Text;
oCommand.Parameters["@contact1"].Value=tbContact1.Text;
oCommand.Parameters["@contact2"].Value=tbContact2.Text;
oCommand.Parameters["@obs1"].Value=tbObs1.Text;
oCommand.Parameters["@obs2"].Value=tbObs2.Text;

sqlConnection1.Open();
oCommand.ExecuteNonQuery();

MessageBox.Show("Données enregistrées.", "Validation!", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
AgenceLoad(); //on rafraîchi la liste des noms d'agence  

}
catch(Exception ex)
{
MessageBox.Show(ex.Message);
}
finally
{
sqlConnection1.Close();
}
}
}

private void AgenceDelete()
{
DialogResult oReponse=MessageBox.Show("Voulez-vous supprimer cette agence ?", "Confirmation!", MessageBoxButtons.YesNo, MessageBoxIcon.Exclamation);

if (oReponse.Equals(DialogResult.Yes))
{
string strQuery="delete from agence where id_agence="+cbAgence.SelectedValue;

try
{
SqlCommand oCommand = new SqlCommand(strQuery,sqlConnection1);
sqlConnection1.Open();
oCommand.ExecuteNonQuery();

MessageBox.Show("Agence effacée !", "Validation!", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
AgenceLoad();
}
catch(Exception ex)
{
MessageBox.Show(ex.Message);
}
finally
{
sqlConnection1.Close();
}
}
}


Articles de la même catégorie

 Pages : Top


681 Visites
0 Commentaires
Navigation basic dans l'ERP SAP
[10 mn de lecture - paru le 11/3/2003 - Public : Débutant]

En savoir plus


629 Visites
0 Commentaires
Implémentation d'une GMAO
[25 mn de lecture - paru le 11/3/2003 - Public : Débutant]

En savoir plus


3875 Visites
0 Commentaires
Démarrer avec Filemaker Pro
[20 mn de lecture - paru le 11/3/2003 - Public : Débutant]

En savoir plus

   Tous les Articles


SUPINFO Training Center peut vous proposer une formation ...

   Devenez Ingénieur Système Microsoft en 35 jours avec SUPINFO Training Center
   Devenez Certifiés Cisco en 13 jours avec SUPINFO Training Center
   Devenez Administrateur Système Microsoft avec SUPINFO Training Center
   Devenez Développeur Microsoft .NET en 13 jours avec SUPINFO Training Center



Powered by Campus-Booster Technology
Conditions d'utilisation & Copyright | Respect de la vie privée
© Copyright 1965-2006 Supinfo Paris, Paris Academy of Computer Science
Supinfo, Ecole Supérieure d'Informatique et Paris Academy Of Computer Science are trade marks.
23, rue de Château LANDON - 75010 PARIS - Phone : +33 (0) 153359 700 Fax : +33 (0) 153359 701

Web site autided by :