Programmation SQL server et C#

Signaler
Messages postés
26
Date d'inscription
vendredi 5 novembre 2010
Statut
Membre
Dernière intervention
25 juillet 2012
-
Messages postés
26
Date d'inscription
vendredi 5 novembre 2010
Statut
Membre
Dernière intervention
25 juillet 2012
-
Bonsoir à tous
j'ai un problème je suis entrait de programme une petite application avec SQL server et C# mais j'ai raconte un problème pour récupérer les données qui se trouve dans la table Employer le but est que: j'ai deux tables service et employer dans la table service se trouver(numS,nomS), dans la table Employer(codeE,nom, prénom,salaire,numS)il y a un lien entre numS de la table service et celui de Employer dans l'interface il y à un Combobox qui récupère les données de la table service et un datagrid pour Affiche les données de la table Employer on disons on sélectionnée le nom de service dans comboboxe et les données de la table employer s'affiche dans datagride mais je n'arrive affiche ses données là dans datagride aide SVP voilà le code du combobox pour affiche dans datagride:

private void comboService_SelectedIndexChanged(object sender, EventArgs e)
{
try
{
string req = "select numE,nom,prenom,salaire from EMPLOYE,SERVICES";
req += "where EMPLOYE.sce=SERVICES.codeS and 'nom';'prenom'";
req +=comboService.Text + "'";
if(cnx.State==0)
cnx.Open();
cmd.CommandText = req;
rd = cmd.ExecuteReader();

dgv.Rows.Clear();
while (rd.Read())
{

dgv.Rows.Add(rd[0], rd[1], rd[2], rd[3]);
}

//int nb = dgv.Rows.Count ;
label2.Text = "Nombre des enployes est " + comboService.Text + ":" + dgv.Rows.Count.ToString();

rd.Close();
cnx.Close();
}
catch (Exception ex)
{
MessageBox.Show("Erreur:__ " + ex.Message, "Erreur", MessageBoxButtons.OK, MessageBoxIcon.Error);
}


}
merci et joyeux noël

6 réponses

Messages postés
834
Date d'inscription
samedi 15 novembre 2008
Statut
Membre
Dernière intervention
14 janvier 2017
32
Bonjour

En fait je ne comprends pas bien ta requête SQL

essaie cela (je suppose que la combobox contient le nom des services et non pas le numéro) :
	
string Query = @"
 SELECT EMPLOYE.numE, EMPLOYE.nom, EMPLOYE.prenom, EMPLOYE.salaire
 FROM EMPLOYE 
 INNER JOIN SERVICES ON EMPLOYE.NumS = SERVICES.NumS
 WHERE (SERVICES.NomS = @NomService)";

SqlDataReader reader = null;

SqlCommand command = new SqlCommand(Query, connection);
command.Parameters.AddWithValue("@NomService", comboService.SelectedItem.ToString());

try
{
dgv.Rows.Clear();
reader = command.ExecuteReader();
while (reader.Read())
{
dgv.Rows.Add(reader[0], reader[1], reader[2], reader[3]);
}
//Si AllowUserToAddRows alors il y a une ligne de plus que de données.
int nb = dgv.AllowUserToAddRows ? dgv.Rows.Count - 1 : dgv.Rows.Count; 
label2.Text = string.Format("Nombre des enployes pour le service {0} est : {1} ", comboService.Text ,nb); 
}
catch (Exception ex) 
{
MessageBox.Show("Erreur:__ " + ex.Message, "Erreur", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
finally
{
if (reader != null) reader.Close();
}


Joyeux noël à toi aussi.

Bob.
C# is amazing, enjoy it!
Messages postés
26
Date d'inscription
vendredi 5 novembre 2010
Statut
Membre
Dernière intervention
25 juillet 2012

Oui les mon des service se trouver dans le combobox je viens de le faire avec les code dans tu ma passé mais ça me données erreur on disons "erreur n'existe une connections ouvert mais la connections actuelle est ferme".

merci pour votre aide
Messages postés
834
Date d'inscription
samedi 15 novembre 2008
Statut
Membre
Dernière intervention
14 janvier 2017
32
bonsoir

dans mon exemple ma connexion est ouverte plus tôt.
Dans ton cas il te faut ouvrir la connexion

par exemple:

string Query = @"
 SELECT EMPLOYE.numE, EMPLOYE.nom, EMPLOYE.prenom, EMPLOYE.salaire
 FROM EMPLOYE 
 INNER JOIN SERVICES ON EMPLOYE.NumS = SERVICES.NumS
 WHERE (SERVICES.NomS = @NomService)";

SqlDataReader reader = null;

SqlCommand command = new SqlCommand(Query, cnx);
command.Parameters.AddWithValue("@NomService", comboService.SelectedItem.ToString());

try
{
if(cnx.State==0) 
cnx.Open(); 

dgv.Rows.Clear();
reader = command.ExecuteReader();
while (reader.Read())
{
dgv.Rows.Add(reader[0], reader[1], reader[2], reader[3]);
}
//Si AllowUserToAddRows alors il y a une ligne de plus que de données.
int nb = dgv.AllowUserToAddRows ? dgv.Rows.Count - 1 : dgv.Rows.Count; 
label2.Text = string.Format("Nombre des enployes pour le service {0} est : {1} ", comboService.Text ,nb); 
}
catch (Exception ex) 
{
MessageBox.Show("Erreur:__ " + ex.Message, "Erreur", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
finally
{
if (reader != null) reader.Close();
cnx.Close();
}




Bob.
C# is amazing, enjoy it!
Messages postés
26
Date d'inscription
vendredi 5 novembre 2010
Statut
Membre
Dernière intervention
25 juillet 2012

Bonsoir
merci beaucoup pour ton aide mais je voulais juste te dite que ça ne marche pas toujours maintenant ça donner l'erreur suivant "Impossible d'ajouter une ligne dans datagrideview dépourvu de colonne.les colonnes doivent être ajoutés au préalable" voila mon code:

string Query = @"
SELECT EMPLOYE.numE, EMPLOYE.nom, EMPLOYE.prenom, EMPLOYE.salaire
FROM EMPLOYE
INNER JOIN SERVICES ON EMPLOYE.sce = SERVICES.codeS
WHERE (SERVICES.libelle = @libelle)";

SqlDataReader reader = null;
SqlCommand command = new SqlCommand(Query, cnx);
command.Parameters.AddWithValue("@libelle", comboService.SelectedItem.ToString());

try
{
if (cnx.State == 0)
cnx.Open();

dgv.Rows.Clear();
reader = command.ExecuteReader();
while (reader.Read())
{
dgv.Rows.Add(reader[0], reader[1], reader[2], reader[3]);
}
//Si AllowUserToAddRows alors il y a une ligne de plus que de données.
int nb = dgv.AllowUserToAddRows ? dgv.Rows.Count - 1 : dgv.Rows.Count;
label2.Text = string.Format("Nombre des enployes pour le service {0} est : {1} ", comboService.Text, nb);

}
catch (Exception ex)
{
MessageBox.Show("Erreur:__ " + ex.Message, "Erreur", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
finally
{
if (reader != null) reader.Close();
cnx.Close();
}


}

le sce pour la table Employé et le codeS on un lien (la clés étrangère) et le libelle c'est le nom de service.
une foi de plus merci
Messages postés
834
Date d'inscription
samedi 15 novembre 2008
Statut
Membre
Dernière intervention
14 janvier 2017
32
Bonjour

L'erreur ne vient plus de la requête, mais de la datagridview.

pour pouvoir ajouter des lignes dans une datagridview, il faut la préparer en y créant des colonnes.

Tu peux le faire par le désigner:
Dans la "form" click droit sur la datagridview et selectionne "Edit Columns"
là tu peux créer tes colonnes,
dans ton cas il t'en faut 4 ce qui correspond au nombre de valeur que tu passes dans la méthode dgv.Rows.Add(...)

si non, depuis ton code, dans le constructeur de la "winform"
exemple :
public Form1()
{

InitializeComponent();
//Création de 4 colonnes
DataGridViewTextBoxColumn Column1 = new DataGridViewTextBoxColumn();
Column1.HeaderText = "Numéro";
Column1.Name = "EMPLOYE_numE";

DataGridViewTextBoxColumn Column2 = new DataGridViewTextBoxColumn();
Column2.HeaderText = "Nom";
Column2.Name = "EMPLOYE_nom";

DataGridViewTextBoxColumn Column3 = new DataGridViewTextBoxColumn();
Column3.HeaderText = "Prénom";
Column3.Name = "EMPLOYE_prenom";

DataGridViewTextBoxColumn Column4 = new DataGridViewTextBoxColumn();
Column4.HeaderText = "Salaire";
Column4.Name = "EMPLOYE_salaire";

//Ajout des colonnes dans la DataGridView
dgv.Columns.AddRange(new DataGridViewColumn[] { Column1, Column2, Column3, Column4 });



Bob.
C# is amazing, enjoy it!
Messages postés
26
Date d'inscription
vendredi 5 novembre 2010
Statut
Membre
Dernière intervention
25 juillet 2012

Merci beaucoup pour ton aide ça marche maintenant.

j'ai encore un autre problème pour l'ajouter dans la base de donnée et la modification les requête que j'utilise ça ne marche pas.

bonne fête de fin d'année