Programmer en C# avec ADO.NET
[15 mn de lecture - paru le 11/3/2003 - Public : Débutant]
|
   
|
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();
}
}
} |
|