我已經在Visual Basic Express Edition(winforms)中設置了一個簡單的mdb數據庫,並試圖將數據從datagridview更新到數據庫。我已經將數據綁定到我想要在datagridview中的列中,並且這很好。併發衝突:UpdateCommand影響了預期的1個記錄中的0個
經過一番努力之後,我終於成功地在數據庫的每一行都更新了值。但是,試圖修改新創建的記錄會引發此錯誤:「併發衝突:UpdateCommand影響了預期的1條記錄中的0」
我的意思是,好像該錯誤只發生在新創建的行中。因爲關閉應用程序並立即重新打開它,我可以更新單元格的值。 我還注意到,當我剛剛創建一個新行時,該行的ID被設置爲「-1」。其他行沒有ID的負數。這可能是原因嗎?好像該行並未真正更新到數據庫。
所以這是對AddRow按鈕
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
此罷了,我已經把在文本框中插入的DataGridView的新行數據的代碼。 一切看起來都很好(ID列的-1值除外)
數據綁定到數據庫的文本框,這些是我用來嘗試更新單元格值的文本框。 和代碼如下所示:
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
現在,我不知道在所有的,如果這是這樣做的正確方法。 但考慮一下,用於更新新創建行的值的文本框是數據綁定到數據庫或tableadapter本身的嗎?可能是由於該行尚未真正被正確創建,UpdateCommand失敗了嗎?
您的項目是一個winforms應用程序? – 2009-08-08 20:11:47
嗨,是的,它是winforms。我已經更新了第一篇文章,以便更好地描述問題所在。而且,自從我創建此線程後,整個場景發生了一些變化。 :) – 2009-08-10 20:43:46
我的上帝,剛剛解決了這個問題。我需要使用填充方法,它的工作.. 這樣的: Me.SongsTableAdapter.Fill(Me.MusicDBDataSetSongs) – 2009-08-10 20:54:52