La simultanéité de la violation: le UpdateCommand touchées 0 de l'1 records
J'ai une simple base de données mdb mis en place dans Visual Basic Express Edition (winforms) et je suis en train de mettre à jour les données à partir d'un datagridview à une base de données. J'ai databinded les zones de texte pour les colonnes que je veux dans la datagridview et cela fonctionne très bien.
Après quelques difficultés, j'ai enfin réussi à avoir les valeurs mises à jour dans chaque ligne de la base de données. Mais, en essayant de modifier un enregistrement récemment créé génère cette erreur: "la Simultanéité de la violation: le UpdateCommand touchées 0 de l'1 dossiers"
Je veux dire, il me semble que l'erreur se produit uniquement avec des lignes créées. Parce que la fermeture de l'application et de le rouvrir tout de suite, je suis autorisé à mettre à jour les valeurs des cellules.
J'ai aussi remarqué que l'ID de la ligne est réglé à "-1" quand je viens de créer une nouvelle ligne. Les autres lignes n'ont pas un nombre négatif pour ID. Cela pourrait-il être la cause? Semble comme si la ligne n'est pas vraiment à jour de la base de données.
Donc, c'est le code pour le AddRow bouton
Dim newRow As MusicDBDataSet.SongsRow
newRow = MusicDBDataSet.Songs.NewSongsRow()
newRow.Name = txtBoxNewName.Text
newRow.Genre = txtBoxNewGenre.Text
newRow.Rhytm = txtBoxNewRhytm.Text
newRow.Length = txtBoxNewLength.Text
MusicDBDataSet.Songs.Rows.Add(newRow)
Try
Me.Validate()
Me.SongsTableAdapter.Update(Me.MusicDBDataSet.Songs)
Me.SongsBindingSource.EndEdit()
Me.MusicDBDataSet.Songs.AcceptChanges()
Catch ex As Exception
MsgBox(ex.Message)
End Try
Cela remplit les données que j'ai mis dans les boîtes de texte dans une nouvelle ligne de la DataGridView.
Tout semble parfait (sauf pour le -1 de la valeur de la colonne ID)
Les zones de texte qui sont databinded à la base de données, ce sont ceux que j'utilise pour essayer de mettre à jour les valeurs des cellules.
Et le code ressemble à ceci:
Try
Me.Validate()
Me.SongsBindingSource.EndEdit()
Me.SongsTableAdapter.Update(Me.MusicDBDataSet.Songs)
Me.MusicDBDataSet.Songs.AcceptChanges()
Catch ex As Exception
MsgBox(ex.Message)
End Try
Maintenant, je ne suis pas sûr du tout si c'est la bonne façon de le faire.
Mais la réflexion à ce sujet, les zones de texte utilisé pour mettre à jour les valeurs de la création de la ligne sont databinded à la base de données ou de tableadapter lui-même droit? Se pourrait-il que le UpdateCommand échoue car la ligne n'a pas vraiment été créé correctement?
Salut, oui c'est winforms. Et j'ai mis à jour le premier post, donc ça explique un peu mieux ce qu'est le problème. Aussi, l'ensemble du scénario a changé un peu depuis que j'ai créé ce fil de discussion. 🙂
Mon dieu, simplement résolu le problème. J'avais besoin d'utiliser la méthode de Remplissage pour que cela fonctionne.. Comme ceci: Moi.SongsTableAdapter.De Remplissage(De Moi.MusicDBDataSet.Les chansons)
OriginalL'auteur Kenny Bones | 2009-08-08
Vous devez vous connecter pour publier un commentaire.
Je l'ai résolu comme suit:
Après la modification de la table de données n'étape suivante.
OriginalL'auteur SP007
La façon la plus simple est d'ouvrir le jeu de données dans le concepteur. Supprimer la mise à jour, insérer et supprimer des commandes, choisissez la table à carte - configurer - options avancées - générer des commandes insert, update et delete. Laissez la deuxième option décochée.
OriginalL'auteur ItchyChy