Ajouter des données dans la base de donner SQL et C#

mandess Messages postés 26 Date d'inscription vendredi 5 novembre 2010 Statut Membre Dernière intervention 25 juillet 2012 - 27 déc. 2011 à 21:27
Tupad Messages postés 239 Date d'inscription lundi 5 décembre 2005 Statut Membre Dernière intervention 27 août 2012 - 12 janv. 2012 à 21:22
Bonsoir

je suis un débutant en programmation et je suis entrait de faire une petite application en C# mais là je suis bloc pour faire l'ajouter des données dans la base de donnée je ne sais vraiment ce quoi l'erreur aide moi SVP voila les code dont j'utilise pour faire l'ajoute:

private void bAjouter_Click(object sender, EventArgs e)
{
if(cnx.State==0)
cnx.Open();
//affecté les données dans les colonne du datagrid
string numE = Numéro.HeaderText;
string nom = Column1.HeaderText;
string P = Column2.HeaderText;
string sal=Column3.HeaderText;
string rq = @"INSERT INTO EMPLOYE(numE,nom,prenom,salaire) values('" + numE + "'," + nom + ",'" + P + "',"+sal+"')";
SqlCommand cmd = new SqlCommand(rq, cnx);
int resultat = cmd.ExecuteNonQuery();
if (resultat > 0)
MessageBox.Show("L'Ajouter Effectuée");
cnx.Close();

}
dans mon interface il y a juste un datagride et trois bouton Ajouter,Modifie et Supprimer


bonne fête de fin d'année à tous

12 réponses

cs_jopop Messages postés 1540 Date d'inscription lundi 26 mai 2003 Statut Membre Dernière intervention 1 août 2013 12
28 déc. 2011 à 09:01
Salut,

avec le code erreur, le nom de l'exception ou sa description complète, se serait bien plus simple de t'aider ;)

PS : le nom de la propriété HeaderText me laisse supposer qu'elle ne contient pas les valeurs que tu souhaites.
0
Tupad Messages postés 239 Date d'inscription lundi 5 décembre 2005 Statut Membre Dernière intervention 27 août 2012 5
29 déc. 2011 à 12:37
On peut remarquer que dans ta requête "INSERT INTO EMPLOYE(numE,nom,prenom,salaire) values('" + numE + "'," + nom + ",'" + P + "',"+sal+"')", il manque des ' autour de certains champs.

De plus je te conseille d'utiliser les paramètres des commandes SQL pour toutes entrées utilisateurs, ca t'évitera bien des problèmes.

Pense aussi à placer l'exécution de la requête dans un try catch pour éviter de planter l'application suite à une erreur SQL.

Il existe également une autre solution si tu utilises une dataset ou une datatable pour afficher tes données dans ton datagrid. Ces objets ont une method AcceptChanges qui modifient directement les données dans la BD. Plus d'informations sur le lien suivant : http://msdn.microsoft.com/fr-fr/library/ceab2k93.aspx
0
mandess Messages postés 26 Date d'inscription vendredi 5 novembre 2010 Statut Membre Dernière intervention 25 juillet 2012
29 déc. 2011 à 17:14
l'ajouter dont je veux faire avec le datagride ça ne marche pas toujours je ne sais pas ce ne marche avec ma requête aide moi SVP

merci
0
Tupad Messages postés 239 Date d'inscription lundi 5 décembre 2005 Statut Membre Dernière intervention 27 août 2012 5
2 janv. 2012 à 12:52
Tu peux faire une méthode du style :
public void bAjouter_Click(object sender, EventArgs e) 
{ 
bool ok = true;
foreach (DataGridViewRow row in this.dataGrid.Rows)
{
if(row.IsNewRow)
ok &= this.AddRecord(row);
}
if(ok)
MessageBox.Show("Rows inserted);
}

public bool AddRecord(DataGridViewRow row)
{
bool ok = false;
try
{
if(cnx.State==0) 
cnx.Open(); 

string rq = @"INSERT INTO EMPLOYE(numE,nom,prenom,salaire) values(@numE, @nom, @P, @sal)"; 
SqlCommand cmd = new SqlCommand(rq, cnx); 
cmd.Parameters.AddWithValue("@numE", row.Cells[0]); 
cmd.Parameters.AddWithValue("@libelle", row.Cells[1]); 
cmd.Parameters.AddWithValue("@libelle", row.Cells[2]); 
cmd.Parameters.AddWithValue("@libelle", row.Cells[3]); 

int resultat = cmd.ExecuteNonQuery(); 
ok = (resultat > 0);
}
catch(SQLException ex)
{
// Logger l'exception sql
}
finally
{
cnx.Close(); 
}
return ok;
}


Le code n'est absolument pas testé, mais la logique y est.
0

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

Posez votre question
mandess Messages postés 26 Date d'inscription vendredi 5 novembre 2010 Statut Membre Dernière intervention 25 juillet 2012
7 janv. 2012 à 03:00
Bonsjoi je viens de test avec ce code ton tu ma donnée ça ne marche pas toujours ça revoie une message d'erreur comme "aucun mappage existe à partir du type d'objet systeme.windows.form.datadrideviewstexteboxcll ver un type inconnu de fournisseur natif managé"

merci pour l'aide
0
Tupad Messages postés 239 Date d'inscription lundi 5 décembre 2005 Statut Membre Dernière intervention 27 août 2012 5
7 janv. 2012 à 17:51
Tu peux copier le code que tu utilises?
0
mandess Messages postés 26 Date d'inscription vendredi 5 novembre 2010 Statut Membre Dernière intervention 25 juillet 2012
9 janv. 2012 à 17:47
voila le code que j'utilise:

private void bAjouter_Click(object sender, EventArgs e)
{
bool ok = true;
foreach (DataGridViewRow row in this.dgv.Rows)
{
if(row.IsNewRow)
ok &= this.AddRecord(row);
}
if(ok)
MessageBox.Show("Rows inserted");

}

public bool AddRecord(DataGridViewRow row)
{
bool ok = false;
try
{
if(cnx.State==0)
cnx.Open();

string rq = @"INSERT INTO EMPLOYE(numE,nom,prenom,salaire) values(@numE, @nom, @Prenom, @salaire)";
SqlCommand cmd = new SqlCommand(rq, cnx);
cmd.Parameters.AddWithValue("@numE", row.Cells[0]);
cmd.Parameters.AddWithValue("@libelle", row.Cells[1]);
cmd.Parameters.AddWithValue("@libelle", row.Cells[2]);
cmd.Parameters.AddWithValue("@libelle", row.Cells[3]);

int resultat = cmd.ExecuteNonQuery();
ok = (resultat > 0);
}
catch(Exception ex)
{
// Logger l'exception sql
MessageBox.Show("erreur "+ ex.Message, "erreur", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
finally
{
cnx.Close();
}
return ok;
0
Tupad Messages postés 239 Date d'inscription lundi 5 décembre 2005 Statut Membre Dernière intervention 27 août 2012 5
11 janv. 2012 à 19:08
Commence par changer
cmd.Parameters.AddWithValue("@libelle", row.Cells[1]);
cmd.Parameters.AddWithValue("@libelle", row.Cells[2]);
cmd.Parameters.AddWithValue("@libelle", row.Cells[3]); 


par

cmd.Parameters.AddWithValue("@nom", row.Cells[1]);
cmd.Parameters.AddWithValue("@Prenom", row.Cells[2]);
cmd.Parameters.AddWithValue("@salaire", row.Cells[3]); 


et reessaie.

Tu peux nous donner la structure de la table SQL dans laquelle tu essaies d'insérer tes données? Le nom des champs ainsi que leur type
0
mandess Messages postés 26 Date d'inscription vendredi 5 novembre 2010 Statut Membre Dernière intervention 25 juillet 2012
12 janv. 2012 à 12:06
Bonjour

la structure de la table est la suivant:

numE type int
nom type varchar
prenom type varchar
salaire type money

le code dont j'ai modifier toujours la mm erreur
0
BarthOlivier Messages postés 132 Date d'inscription mercredi 6 mars 2002 Statut Membre Dernière intervention 27 novembre 2012 1
12 janv. 2012 à 15:54
Salut, je suis peu habitué à SQL mais tu peux faire comme sous mysql ? (je l'ai adapté a ton code) :

      StringBuilder SB = new StringBuilder();
      SB.Append("INSERT INTO EMPLOYE(numE,nom,prenom,salaire) values(");
      SB.Append(row.Cells[0].ToString() + ",");
      SB.Append(row.Cells[1].ToString() + ",");
      SB.Append(row.Cells[2].ToString() + ",");
      SB.Append(row.Cells[3].ToString() + ",");
      SB.Append(")");

      SqlCommand cmd = new SqlCommand(SB.ToString(), cnx); 
      int resultat = cmd.ExecuteNonQuery();


MisterMok
0
BarthOlivier Messages postés 132 Date d'inscription mercredi 6 mars 2002 Statut Membre Dernière intervention 27 novembre 2012 1
12 janv. 2012 à 15:56
Modif -> SB.Append(row.Cells[3].ToString()) pour la dernière ligne

MisterMok
0
Tupad Messages postés 239 Date d'inscription lundi 5 décembre 2005 Statut Membre Dernière intervention 27 août 2012 5
12 janv. 2012 à 21:22
Oui mais dans ce cas, je vois deux problèmes.
- Tu as oublié les guillemets pour les champs de type varchar (ici les lignes avec les paramètres 1 et 2)
- Il vaut mieux utiliser les paramètres des commandes SQL pour éviter les problème de sécurité par des injections SQL.

Sinon tant que ca fonctionne...
0
Rejoignez-nous