尝试修改某些DataTable对象时,我遇到了一些奇怪的行为。在第二次调用子例程时,我将源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
如果有更好的方法来更新我的表格,有关如何修复我的代码或建议的任何想法吗?
答案 0 :(得分:0)
从错误的外观来看,您似乎正在尝试将相同的密钥添加到表中。我要做的是,从表中删除所有测试数据,然后删除通用:
赶上例外情况
Debug.Print(ex.ToString)
..实际上捕获主键异常(上面列出的异常),然后执行任何操作。例如,如果您知道将存在主键违规(即,您可能有两个相同的PK并且只需要一个),那么只需忽略该错误并继续。
有意义吗?
答案 1 :(得分:0)
我会删除主键,复制表,然后重新创建它。