DataSet與並行違規

摘要:DataSet與並行違規

在VS2005中資料處理常常會用到DataSet,而DataSet的特性是會把資料從資料來源中取出之後放到Client端的記憶體中;而在資料處理 完成之後要Update回資料庫,這時候如果資料來源中的資料跟當初我們撈出來的資料是不相符合的,也就是可能被其他使用者變更過了,這時候就會出現"並 行違規"的錯誤訊息,那我們應該怎麼去處理這個錯誤呢?
下面介紹的是比較簡單的方式,會利用DataSet的Merge再一次的將資料合併,並且把變更Update回資料庫,感覺就是"後面的變更會蓋掉前面的",程式碼如下

  1. Try  
  2.             Me.xxxTableAdapter.Update(Me.xxxDataSet.xxxDataTable)  
  3.             Me.xxxDataSet.xxxTable.AcceptChanges()  
  4.             MessageBox.Show("資料儲存成功")  
  5.         Catch dbex As Data.DBConcurrencyException  
  6.             If MessageBox.Show("資料可能經由其他使用者變更過,仍要更新嗎?""更新錯誤", MessageBoxButtons.YesNo) = Windows.Forms.DialogResult.Yes Then  
  7.                 Try  
  8.                     Using TempDS As New xxxDataSet.xxxDataTable  
  9.                         Me.xxxTableAdapter.Fill(TempDS)  
  10.                         Me.xxxDataSet.xxxDataTable.Merge(TempDS, True)  
  11.                         Me.xxxTableAdapter.Update(Me.xxxDataSet.xxxDataTable)  
  12.                         Me.xxxDataSet.xxxDataTable.AcceptChanges()  
  13.                     End Using  
  14.                 Catch ex As Exception  
  15.                     MessageBox.Show(ex.Message.ToString, "儲存失敗")  
  16.                 End Try  
  17.             End If  
  18.         Catch ex As Exception  
  19.             MessageBox.Show(ex.Message.ToString, "儲存錯誤")  
  20.         End Try  

Try
            Me.xxxTableAdapter.Update(Me.xxxDataSet.xxxDataTable)
            Me.xxxDataSet.xxxTable.AcceptChanges()
            MessageBox.Show("資料儲存成功")
        Catch dbex As Data.DBConcurrencyException
            If MessageBox.Show("資料可能經由其他使用者變更過,仍要更新嗎?", "更新錯誤", MessageBoxButtons.YesNo) = Windows.Forms.DialogResult.Yes Then
                Try
                    Using TempDS As New xxxDataSet.xxxDataTable
                        Me.xxxTableAdapter.Fill(TempDS)
                        Me.xxxDataSet.xxxDataTable.Merge(TempDS, True)
                        Me.xxxTableAdapter.Update(Me.xxxDataSet.xxxDataTable)
                        Me.xxxDataSet.xxxDataTable.AcceptChanges()
                    End Using
                Catch ex As Exception
                    MessageBox.Show(ex.Message.ToString, "儲存失敗")
                End Try
            End If
        Catch ex As Exception
            MessageBox.Show(ex.Message.ToString, "儲存錯誤")
        End Try

相關參考: