当我尝试修改某些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