Programmation SQL server et C#

mandess Messages postés 26 Date d'inscription vendredi 5 novembre 2010 Statut Membre Dernière intervention 25 juillet 2012 - 24 déc. 2011 à 02:37
mandess Messages postés 26 Date d'inscription vendredi 5 novembre 2010 Statut Membre Dernière intervention 25 juillet 2012 - 27 déc. 2011 à 09:49
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

cs_Robert33 Messages postés 834 Date d'inscription samedi 15 novembre 2008 Statut Membre Dernière intervention 14 janvier 2017 33
24 déc. 2011 à 08:44
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!
0
mandess Messages postés 26 Date d'inscription vendredi 5 novembre 2010 Statut Membre Dernière intervention 25 juillet 2012
24 déc. 2011 à 12:11
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
0
cs_Robert33 Messages postés 834 Date d'inscription samedi 15 novembre 2008 Statut Membre Dernière intervention 14 janvier 2017 33
25 déc. 2011 à 18: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!
0
mandess Messages postés 26 Date d'inscription vendredi 5 novembre 2010 Statut Membre Dernière intervention 25 juillet 2012
25 déc. 2011 à 20:11
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Robert33 Messages postés 834 Date d'inscription samedi 15 novembre 2008 Statut Membre Dernière intervention 14 janvier 2017 33
26 déc. 2011 à 08:46
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!
0
mandess Messages postés 26 Date d'inscription vendredi 5 novembre 2010 Statut Membre Dernière intervention 25 juillet 2012
27 déc. 2011 à 09:49
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
0