复制表时的约束异常?

时间:2009-10-23 16:14:36

标签: vb.net exception datatable primary-key constraints

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

如果有更好的方法来更新我的表格,有关如何修复我的代码或建议的任何想法吗?

2 个答案:

答案 0 :(得分:0)

从错误的外观来看,您似乎正在尝试将相同的密钥添加到表中。我要做的是,从表中删除所有测试数据,然后删除通用:

赶上例外情况
Debug.Print(ex.ToString)

..实际上捕获主键异常(上面列出的异常),然后执行任何操作。例如,如果您知道将存在主键违规(即,您可能有两个相同的PK并且只需要一个),那么只需忽略该错误并继续。

有意义吗?

答案 1 :(得分:0)

我会删除主键,复制表,然后重新创建它。