當我嘗試修改某些DataTable對象時,遇到了一些奇怪的行爲。在第二次調用子程序,我得到以下錯誤,當我到源數據表複製到工作集:複製表時約束異常?
System.Data.ConstraintException被 抓消息=「列‘PK’是 受限於值是唯一的。值 'path0.tag0'已經存在。「
對於上下文,我在這段代碼中定義了數據表的主鍵。
itemsTable.Columns.Add("pk")
For Each itemrow As DataRow In itemsTable.Rows
itemrow.Item("pk") = itemrow.Item("path").ToString + itemrow.Item("tag")
Next
Dim keyColumns() As DataColumn = {itemsTable.Columns("pk")}
itemsTable.PrimaryKey = keyColumns
我然後更新使用的代碼在這個子程序
Private Sub DataChange(ByVal ClientHandles As Array, ByVal CurrentValues As Array, ByVal QualityValueArray() As String) _
Handles myOpcData.DataChange
Dim updateTable As New DataTable
Try
updateTable = itemsTable.Copy <-----Exception happens here
For index As Integer = 1 To ClientHandles.Length
updateTable.Rows(ClientHandles(index)).Item("value") = CurrentValues(index)
Next
itemsTable.Merge(updateTable)
Catch ex As Exception
Debug.Print(ex.ToString)
End Try
End Sub
如何要麼修復我的代碼或建議是否有更新我表一個更好的辦法的任何想法表?
DataTable.Merge函數可以具有功能。首先,如果主鍵未設置,它將追加數據。如果表的主鍵被設置,那麼它將使用主鍵來更新表,因此我對這個錯誤感到困惑。 另外,在現有的'Catch ex作爲異常'之上添加'Catch ex as ConstraintException',但是,如果表沒有更新我的值,這仍然浪費週期。 – 2009-10-23 16:28:24