2013-07-30 49 views
0

我正在研究一個VB.NET項目,並試圖在SQL數據庫中插入/更新一些行。併發衝突 - UpdateCommand影響了預期的1條記錄中的0 0

要做到這一點,我使用下面的代碼來取回基於3個參數的數據集。 如果數據集沒有返回任何數據,那麼代碼只是插入一個新行。

這工作正常。

但是,如果數據帶回一行(意味着行已經存在於表中),那麼我想要更新其中一個值。 這是我在這篇文章的標題中得到錯誤。

任何人都可以幫助我哪裏我錯了嗎?

預先感謝您。

Dim x_Update As Boolean 

AdaptSql = New Data.AdapterX(SQL_ConnectionString) 
DS = New DatsetX 
AdaptSql.Fill(DS, Number, PeriodID, TypeID) 

If DS.tbl_A.Count > 0 Then 
    x_Row = DS.tbl_A(0) 
    x_Row.BeginEdit() 
    x_Update = True 
Else 
    x_Row = DS.tbl_A.NewRow 
End If 

x_Row.Number = Number 
x_Row.DateID = PeriodID 
x_Row.TypeID = TypeID 
x_Row.Value = Value 
x_Row.UpdatedDate = Date.Now 

If x_Update = False Then DS.tbl_A.Addtbl_ARow(x_Row) 

x_Row.EndEdit() 

AdaptSql.Update(DS) 

x_Row = Nothing 
DS.Dispose() 
AdaptSql = Nothing 

回答

0

檢驗呼叫AdaptSql.Update前x_Row.RowState(DS),爲新創建的行,該行的狀態應該是「增加」,而現有的記錄應該「修改時間」,因爲有一些更新到它。

+0

謝謝你 - 我已經按照你的說法檢查了RowState,並且對於作爲新行進入的條目,然後按預期狀態「添加」。對於正在更新的行是「修改」的。現在我不完全確定如何處理這些信息?我認爲這個問題是由於它顯示爲「修改」的事實而發生的? –

+0

通常這種錯誤是由於它在嘗試更新時無法找到DB行 - 它期望根據適配器構造的條件找到0時更新一行。另一個嘗試是使用sql profiler來監視從您的代碼發送到SQL的SQL文本命令來執行更新。然後檢查sql文本命令以查看任何錯誤\並且可以給出一些線索,但不能保證。 – Rex

+0

我可以從代碼中想到另一點:你更新了字段[UpdateDate],你是否檢查過表中是否有任何觸發器在其他字段更新時自動更新此字段?這可能會導致併發異常 – Rex

相關問題