Я испытываю какое-то странное поведение при попытке изменить некоторые объекты DataTable. При втором вызове подпрограммы, я получаю следующее сообщение об ошибке, когда я скопировать исходный объект DataTable в рабочий набор:Исключение ограничений при копировании таблицы?
System.Data.ConstraintException был пойманы Message = "Колонка„рк“является вынужден быть уникальным. Значение '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 as ConstraintException» выше существующего «Catch ex as Exception», однако это все равно пустая трата циклов, если таблица не обновляется с моими значениями. –