Insertion dans une table access avec C#

man_runner Messages postés 4 Date d'inscription mercredi 14 mars 2007 Statut Membre Dernière intervention 26 mars 2007 - 26 mars 2007 à 18:19
sonysousse Messages postés 7 Date d'inscription vendredi 16 février 2007 Statut Membre Dernière intervention 1 novembre 2007 - 29 oct. 2007 à 00:48
  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

cs_Jordan59 Messages postés 174 Date d'inscription vendredi 26 mai 2006 Statut Membre Dernière intervention 9 avril 2014 7
26 mars 2007 à 19:06
Pour plus de simplicité tu peux utiliser un jeu d'enregistrements RecordSet
0
MorpionMx Messages postés 3466 Date d'inscription lundi 16 octobre 2000 Statut Membre Dernière intervention 30 octobre 2008 57
26 mars 2007 à 19:34
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# 
0
MorpionMx Messages postés 3466 Date d'inscription lundi 16 octobre 2000 Statut Membre Dernière intervention 30 octobre 2008 57
26 mars 2007 à 19:42
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# 
0
man_runner Messages postés 4 Date d'inscription mercredi 14 mars 2007 Statut Membre Dernière intervention 26 mars 2007
26 mars 2007 à 19:48
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 ?


 
0

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

Posez votre question
MorpionMx Messages postés 3466 Date d'inscription lundi 16 octobre 2000 Statut Membre Dernière intervention 30 octobre 2008 57
26 mars 2007 à 20:13
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# 
0
MorpionMx Messages postés 3466 Date d'inscription lundi 16 octobre 2000 Statut Membre Dernière intervention 30 octobre 2008 57
26 mars 2007 à 20:14
Par ailleurs, pourquoi laisser ton champ id vide ?

Mx
MVP C# 
0
man_runner Messages postés 4 Date d'inscription mercredi 14 mars 2007 Statut Membre Dernière intervention 26 mars 2007
26 mars 2007 à 20:34
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 ?
0
MorpionMx Messages postés 3466 Date d'inscription lundi 16 octobre 2000 Statut Membre Dernière intervention 30 octobre 2008 57
26 mars 2007 à 20:36
Ne rien mettre, tout simplement ;)

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

Mx
MVP C# 
0
cs_Jordan59 Messages postés 174 Date d'inscription vendredi 26 mai 2006 Statut Membre Dernière intervention 9 avril 2014 7
26 mars 2007 à 20:41
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é
0
MorpionMx Messages postés 3466 Date d'inscription lundi 16 octobre 2000 Statut Membre Dernière intervention 30 octobre 2008 57
26 mars 2007 à 20:42
En effet, je comprends mieux maintenant ^^

Mx
MVP C# 
0
man_runner Messages postés 4 Date d'inscription mercredi 14 mars 2007 Statut Membre Dernière intervention 26 mars 2007
26 mars 2007 à 20:53
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.
0
sonysousse Messages postés 7 Date d'inscription vendredi 16 février 2007 Statut Membre Dernière intervention 1 novembre 2007
29 oct. 2007 à 00:48
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
0
Rejoignez-nous