Cle auto incrémenté

Résolu
philpas2 Messages postés 8 Date d'inscription samedi 24 mars 2007 Statut Membre Dernière intervention 23 avril 2007 - 14 avril 2007 à 21:08
bobjoumi Messages postés 24 Date d'inscription mercredi 2 mai 2007 Statut Membre Dernière intervention 12 mai 2009 - 26 janv. 2009 à 10:40
Bonjour,
je débute en C# et je suis perdu dans les bases de données. Je mets en memoire le contenu d'une table d'une base de donnée dans un dataset. Dans cette table j'ai une clé auto incrementé et 2 champs textes. Je veux ajouter un enregistrement dans ce dataset et mettre à jour ma base de donnée. J'ai trouvé des exemples de programmes qui fait cela mais pas avec une clé auto. Je ne sais pas comment il faut faire pour ecrire un enregistrement avec une clé auto. Voici ce que j'avais écrit

<li></li>
void DefinirAdapter()<li>{</li>
<li>dAdapterMaListemagasin.InsertCommand = </li>
newSqlCeCommand();<li>dAdapterMaListemagasin.InsertCommand.Connection connexion;</li><li>dAdapterMaListemagasin.InsertCommand.CommandText </li>
"INSERT INTO Liste_magasin VALUES(?,?,?)";<li>dAdapterMaListemagasin.InsertCommand.Parameters.Add(</li>
"paramCle",
SqlDbType.Int, 4,
"Cle_magasin"); // Cle auto incrémenté<li>dAdapterMaListemagasin.InsertCommand.Parameters.Add(</li>
"paramMagasin",
SqlDbType.NVarChar, 30,
"Nom_magasin");<li>dAdapterMaListemagasin.InsertCommand.Parameters.Add(</li>
"paramVille",
SqlDbType.NVarChar, 30,
"Ville_magasin");<li></li>
}

<li>privatevoid menuItem_Ajouter_Click(object sender, EventArgs e)
</li><li>{
</li><li>DataRow ligne;
</li><li>ligne = dSetListe_magasin.Tables["Magasin"].NewRow();
</li><li>ligne["Cle_magasin"] = -1; // C'est ma cle automatique, que faut il mettre?
</li><li>ligne["Nom_magasin"] = "Auchan"; // 1er champ texte
</li><li>ligne["Ville_magasin"] = "Paris"; // 1eme champ texte
</li><li>connexion.Open();
</li><li>dSetListe_magasin.Tables["Magasin"].Rows.Add(ligne);
</li><li>try
</li><li>{
</li><li>dAdapterMaListemagasin.Update(dSetListe_magasin, "Magasin");
</li><li>}
</li><li>catch (SqlCeException exception)
</li><li>{
</li><li>MessageBox.Show("Erreur :\n" + exception.Message, "Erreur");
</li><li>}
</li><li>dataGrid_Magasin.Update();
</li><li>connexion.Close();
</li><li>}
</li>bien sur lorsque je clique sur le bouton ajouter, le programme me dit "impossible de modifier la colonne cle_magasin" et si je supprime dans le DefinirAdapter
la ligne cle_magasin, le programme me dit que le nombre de colonne ne correspond pas avec la base de donnée.
Comment faut il faire? Je cherche sur le net mais je ne trouve pas.
Merci de votre aide

4 réponses

cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
14 avril 2007 à 22:18
Salut,

Bati tes requêtes en nommant les colonnes :

dAdapterMaListemagasin.InsertCommand.CommandText = "INSERT INTO Liste_magasin(<<<<NOMS DES 2 COLONNES>>>>) VALUES(?,?)";
dAdapterMaListemagasin.InsertCommand.Parameters.Add("paramMagasin", SqlDbType.NVarChar, 30, "Nom_magasin");
dAdapterMaListemagasin.InsertCommand.Parameters.Add("paramVille", SqlDbType.NVarChar, 30, "Ville_magasin");

/*
coq
MVP Visual C#
CoqBlog
*/
3
philpas2 Messages postés 8 Date d'inscription samedi 24 mars 2007 Statut Membre Dernière intervention 23 avril 2007
14 avril 2007 à 22:37
Merci, c'est bien cela. Il suffisait de nommer les colonnes.
ça fait des jours que je cherchais.
0
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
14 avril 2007 à 22:44
Toujours nommer les colonnes, après tout leur ordre ne veut pas dire grand chose.
Part du principe qu'un jour quelqu'un ira s'amuser avec les colonnes, dans ton dos ;-)

/*
coq
MVP Visual C#
CoqBlog
*/
0
bobjoumi Messages postés 24 Date d'inscription mercredi 2 mai 2007 Statut Membre Dernière intervention 12 mai 2009 2
26 janv. 2009 à 10:40
merci ca ma egalement servie
0
Rejoignez-nous