2009-09-08 11 views
2

J'ai fait un ListBox avec votre chose standard de contrôle intelligent, et l'ai connecté à une base de données. Il obtient les données que j'ai prégénérés là-bas par le constructeur de requête, alors quand je fais ceci:Méthode TableAdapter.update, où est-elle passée?

this.calibrate_swipesTableAdapter.Fill(this.xperdex_crandallDataSet.calibrate_swipes); 

je reçois une zone de liste avec mes données.

puis, quand j'ajouter un bloc de données à elle, par ceci:

toadd["card_number"] = card_number; 
this.xperdex_crandallDataSet.Tables["calibrate_swipes"].Rows.Add(toadd); 

Il fonctionne également. Cela fonctionne très bien. Maintenant, quand je ferme, je perds toutes mes informations. Mettre à jour mon adaptateur et AcceptChanges, n'est-ce pas?

Pas si vite. Quand j'appelle

this.calibrate_swipesTableAdapter.Update(this.xperdex_crandallDataSet.calibrate_swipes); 

Je reçois "ne contient pas de définition de 'mise à jour'".

Ce qui donne? Je ne vois aucune raison pour laquelle la même chose que le remplissage n'aurait pas de méthode de mise à jour.

Répondre

6

Vous pouvez jeter un oeil à TableAdapter Overview qui stipule:

S'il y a assez d'informations dans la requête principale, InsertCommand, UpdateCommand et les commandes DeleteCommand sont créés par défaut lorsque le TableAdapter est généré. Si la requête principale de TableAdapter est supérieure à une seule instruction SELECT de table, il est possible que le concepteur ne puisse pas générer les commandes InsertCommand, UpdateCommand et DeleteCommand. Si ces commandes ne sont pas générées, vous pouvez recevoir une erreur lors de l'exécution de la méthode TableAdapter.Update.

Vous avez deux choix:

  • Changer votre requête principale
  • Modifier UpdateCommand.

Pour modifier la commande UpdateCommand, recherchez quel est le nom de la classe générée pour TableAdapter. Le code devrait ressembler à quelque chose comme ce qui suit:


SqlCommand yourUpdateCommand = new SqlCommand("UPDATE...", connection); 
this.calibrate_swipesTableAdapter.Adapter.UpdateCommand = yourUpdateCommand; 

MISE À JOUR:

Comme intervenants ont déclaré, il y a d'autres conditions pour lesquelles les commandes ne peuvent pas être générés. Voir les commentaires.

+1

+1 Peut également se produire si la table ne peut pas être mise à jour en raison d'un problème clé (aucune clé, clé non unique ...) –

+0

Si vous ne disposez pas de clé primaire, le concepteur ne génère pas de mise à jour, supprime et insérer des méthodes pour l'adaptateur. – Tarik

+0

Merci les gars. J'ai mis à jour la réponse. –