2009-08-08 19 views
4

我已經在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失敗了嗎?

+0

您的項目是一個winforms應用程序? – 2009-08-08 20:11:47

+0

嗨,是的,它是winforms。我已經更新了第一篇文章,以便更好地描述問題所在。而且,自從我創建此線程後,整個場景發生了一些變化。 :) – 2009-08-10 20:43:46

+2

我的上帝,剛剛解決了這個問題。我需要使用填充方法,它的工作.. 這樣的: Me.SongsTableAdapter.Fill(Me.MusicDBDataSetSongs) – 2009-08-10 20:54:52

回答

3

我解決了它如下:

修改數據表後做下面的步驟。

dataTable = dataTable.GetChanges() 
+1

嗨,我得到相同的Db併發性錯誤Updatecommand受影響的0行。 SO使用了da.ContinueUpdateOnError = true; this.da.Update(ds,「Plant」); 現在它忽略了錯誤,但沒有在數據庫中更新。你是如何解決這個問題的。你在哪裏添加datatable.getchanges() – user575219 2012-05-08 06:49:04

-1

最簡單的方法是在設計器中打開數據集。刪除更新,插入和刪除命令,選擇表格適配器 - 配置 - 高級選項 - 生成插入,更新和刪除語句。不選中第二個選項。

相關問題