I have 2 datasets, each with a DataTable. Each table has the same primary
key, and columns. I am trying to copy rows from one dataset to another,
based on an event from my application.

It all works fine when the row is not present in the destination DataTable.
Now when the row is present in the destination file, the .NET documentation
says use the LoadRowData method of the dataset to copy the row. When do
this, I get a unique key violation problem (right at the EndLoadData point
in the code below).. Here is my code below. Can anybody help??


Dim app As Application
Dim xmlDestFile As String = app.StartupPath & "\" & "dest.xml"
Dim xmlSourceFile As String = app.StartupPath & "\" & "source.xml"
Dim dsDest As New DataSet
Dim dsSource As New DataSet
Dim rwDest As DataRow
Dim rwSource As DataRow

dsDest.ReadXml(xmlDestFile)
dsSource.ReadXml(xmlDestFile)

Try
For Each rwSource In dsSource.Tables(0).Rows
Dim copyRowPersent As Boolean

For Each rwDest In dsDest.Tables(0).Rows
If rwDest.Item("Name") = rwSource.Item("Name") Then
copyRowPersent = True
Exit For
End If
Next

If copyRowPersent Then

Dim newRow(rwSource.Table.Columns.Count - 1) As Object
Dim column As DataColumn
Dim intLoop As Int32

intLoop = 0

For Each column In rwSource.Table.Columns
newRow(intLoop) = rwSource.Item(column)
intLoop = intLoop + 1
Next

dsDest.Tables(0).BeginLoadData()
dsDest.Tables(0).LoadDataRow(newRow, False)
dsDest.Tables(0).EndLoadData() ' I get a
primary key voilation problem here..., I don't even go to accept changes

else
'Import the new rows here using ImportRow
' This works fine...

End If

Next

dsDest.AcceptChanges()
dsDest.WriteXml(xmlDestFile, XmlWriteMode.WriteSchema)
dsDest.Dispose()
dsSource.Dispose()

Catch myex As Exception

MsgBox(myex.ToString, MsgBoxStyle.Information +
MsgBoxStyle.OKOnly, "Test")

End Try


VJ

Re: LoadDataRow Issues by VJ

VJ
Fri Nov 21 15:17:27 CST 2003

I have 2 datasets, each with a DataTable. Each table has the same primary
key, and columns. I am trying to copy rows from one dataset to another,
based on an event from my application.

It all works fine when the row is not present in the destination DataTable.
Now when the row is present in the destination file, the .NET documentation
says use the LoadRowData method of the dataset to copy the row. When do
this, I get a unique key violation problem (right at the EndLoadData point
in the code below).. Here is my code below. Can anybody help??


Dim app As Application
Dim xmlDestFile As String = app.StartupPath & "\" & "dest.xml"
Dim xmlSourceFile As String = app.StartupPath & "\" & "source.xml"
Dim dsDest As New DataSet
Dim dsSource As New DataSet
Dim rwDest As DataRow
Dim rwSource As DataRow

dsDest.ReadXml(xmlDestFile)
dsSource.ReadXml(xmlDestFile)

Try
For Each rwSource In dsSource.Tables(0).Rows
Dim copyRowPersent As Boolean

For Each rwDest In dsDest.Tables(0).Rows
If rwDest.Item("Name") = rwSource.Item("Name") Then
copyRowPersent = True
Exit For
End If
Next

If copyRowPersent Then

rwDest.delete
rwDest.Tables(0).ImportRow(rwSource)

' Dim newRow(rwSource.Table.Columns.Count - 1) As Object
' Dim column As DataColumn
' Dim intLoop As Int32

' intLoop = 0

' For Each column In rwSource.Table.Columns
' newRow(intLoop) = rwSource.Item(column)
' intLoop = intLoop + 1
' Next

' dsDest.Tables(0).BeginLoadData()
' dsDest.Tables(0).LoadDataRow(newRow, False)
' dsDest.Tables(0).EndLoadData() ' I get a
primary key voilation problem here..., I don't even go to accept changes

else
'Import the new rows here using ImportRow
' This works fine...

End If

Next

dsDest.AcceptChanges()
dsDest.WriteXml(xmlDestFile, XmlWriteMode.WriteSchema)
dsDest.Dispose()
dsSource.Dispose()

Catch myex As Exception

MsgBox(myex.ToString, MsgBoxStyle.Information +
MsgBoxStyle.OKOnly, "Test")

End Try


VJ