Insertion dans une table access avec C#

Signaler
Messages postés
4
Date d'inscription
mercredi 14 mars 2007
Statut
Membre
Dernière intervention
26 mars 2007
-
Messages postés
7
Date d'inscription
vendredi 16 février 2007
Statut
Membre
Dernière intervention
1 novembre 2007
-
  Bonjour,
j'écris une petite application formulaire simulant un agenda. Celle-ci doit me permettre de charger ou sauver des données (personnes avec nom, adresse et tel) en utilisant une base de données access.
La partie chargement fonctionne, cependant je rencontre un petit souci lors de l'éxécution avec INSERT pour la sauvegarde des données.  Voici le morceau de code (je pense qu'il y a une errreur dans la chaîne requête) :

// champ du formulaire
personne
.Nom
= textBox1
.Text
;
personne
.Adresse
= textBox2
.Text
;
personne
.Tel
= textBox3
.Text
;

string requête
= "insert into personnes (id,nom,adresse,tel) values('',"+personne
.Nom
+","+personne
.Adresse
+","+personne
.Tel
+")";

sqlcommand
= new OdbcCommand ("",personnesconn
);
sqlcommand
.CommandText
= requête
;

int confirm
= sqlcommand
.ExecuteNonQuery();La structure de la table 'personne' est la suivante :
id (clé primaire )
nom(chaîne)
adresse(chaîne)
tel (chaîne).

Si quelqu'un pouvait m'éclairer ? 
Merci d'avance

12 réponses

Messages postés
174
Date d'inscription
vendredi 26 mai 2006
Statut
Membre
Dernière intervention
9 avril 2014
7
Pour plus de simplicité tu peux utiliser un jeu d'enregistrements RecordSet
Messages postés
3466
Date d'inscription
lundi 16 octobre 2000
Statut
Modérateur
Dernière intervention
30 octobre 2008
54
Salut,

Tu devrais plutot utiliser des requetes paramétrées, ce qui permettra surement -en plus d'etre plus propre- de résoudre ton probleme.
Exemple :

<hr />string requete =
"insert into personnes (id,nom,adresse,tel) values('', @nom, @adresse, @tel)";

OdbcCommand sqlcommand =
new
OdbcCommand(requete, personnesconn);
sqlcommand.Parameters.AddWithValue(
"@nom", persone.nom);
sqlcommand.Parameters.AddWithValue(
"@addresse", personne.adresse);
sqlcommand.Parameters.AddWithValue(
"@personne", personne.tel);

int confirm = sqlcommand.ExecuteNonQuery();
<hr />
Au fait, évite les accents dans les noms de tes variables ! (cf : "requête")

Jordan59 : Non, pas de recordset. Les recordset ont été remplacé dans ado.net (on utiliser DataSet, DataTable,  DataReader, etc.). Qu'est ce que les recordset apporteraient comme solution a son probleme ?

Mx
MVP C# 
Messages postés
3466
Date d'inscription
lundi 16 octobre 2000
Statut
Modérateur
Dernière intervention
30 octobre 2008
54
Erreur dans le dernier parametre que j'ajoute, il s'agit bien sur de [mailto:'@tel' '@tel'] et non pas [mailto:'@personne' '@personne']

Mx
MVP C# 
Messages postés
4
Date d'inscription
mercredi 14 mars 2007
Statut
Membre
Dernière intervention
26 mars 2007

J'ai cette erreur qui se produit :

Exception System.Data.Odbc.OdbcException was thrown in debuggee:
ERROR [07002] [Microsoft][Pilote ODBC Microsoft Access] Trop peu de paramètres. 3 attendu
...

C'est peut etre dû au type du champ id de la table ?


 
Messages postés
3466
Date d'inscription
lundi 16 octobre 2000
Statut
Modérateur
Dernière intervention
30 octobre 2008
54
Non, c'est de ma faute, avec OdbcConnexion les parametres doivent etre '?'.
Remplace ta chaine de connexion par insert into personnes (id, nom, adresse, tel) values('', ?, ?, ?)

Mx
MVP C# 
Messages postés
3466
Date d'inscription
lundi 16 octobre 2000
Statut
Modérateur
Dernière intervention
30 octobre 2008
54
Par ailleurs, pourquoi laisser ton champ id vide ?

Mx
MVP C# 
Messages postés
4
Date d'inscription
mercredi 14 mars 2007
Statut
Membre
Dernière intervention
26 mars 2007

Je laisse le champ id vide car je ne connais pas l'indice de la clé id et comme elle est déclaré de type autoincrement je pense que access gere sa mise a jour automatiquement. Qu'est que tu proposerais ?
Messages postés
3466
Date d'inscription
lundi 16 octobre 2000
Statut
Modérateur
Dernière intervention
30 octobre 2008
54
Ne rien mettre, tout simplement ;)

"insert into personnes (nom, adresse, tel) values(?, ?, ?)"

Mx
MVP C# 
Messages postés
174
Date d'inscription
vendredi 26 mai 2006
Statut
Membre
Dernière intervention
9 avril 2014
7
Oups au temps pour moi j'ai confondu avec VB, désolé en plus j'en avais feit des requêtes paramétrées en C#, ça permet plus de sécurité
Messages postés
3466
Date d'inscription
lundi 16 octobre 2000
Statut
Modérateur
Dernière intervention
30 octobre 2008
54
En effet, je comprends mieux maintenant ^^

Mx
MVP C# 
Messages postés
4
Date d'inscription
mercredi 14 mars 2007
Statut
Membre
Dernière intervention
26 mars 2007

Pas grave, on s'entraide entre informaticiens et c souvent pour un tout petit morceaux de code. Merci pour ton aide. J'en verrai un peu plus sur  les DataSet par curiosite, c vrai que ca a lair un peu plus corsé.
Bonne soirée et à une prochaine fois.
Messages postés
7
Date d'inscription
vendredi 16 février 2007
Statut
Membre
Dernière intervention
1 novembre 2007

Bonjour
j'ai une application avec vs2005 dans laquelle j'utilise une base de donnée Access. j'ai des TextBox que l'utilisateur doit saisir et ce dernier doit etre enregistré dans la base. par exemple
j'ai un groupBox qui contient 3 Text Box: -NomPC
                                                               -AdressIP
                                                               -Masque
        et un bouton Enregistrer: en cliquant sur ce boutton les données saisies doivent etre enregistrés dans la base.
j'ai utilisé DataSet et DataAdapter mais j'ai pas abouti à des solution c'est juste la connection
est ce que quelqu'un peut m'eclairer et m'aider s'il vous plait
Merci