• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 385
  • Last Modified:

DataSet GetChanges - Modified VALUES only

Is there a way to only get the actual values that were modified in a dataset.  My below code works, but produces the whole row, not just the changes data.

I want to display to the user any values that have changed after a "sync" with an outside DB.

Also, the Main Dataset (DRIPeachDataSet) as columns in the table that is syncing that the other dataset (DIMMSDataSet) does not have.  I would like to only compare the field values where the column names match.

I may just have to hard code it...

Thanks.
Private Sub SyncTicket()
   If DIMMSDataSet.HasChanges() Then
            ' Use GetChanges to extract subset.
            PrintValues(DIMMSDataSet.GetChanges(DataRowState.Modified),"Subset values")
   End If
End Sub
 
 Private Sub PrintValues(ByVal dataSet As DataSet, ByVal PeachDataSet As DataSet, ByVal label As String)
        Console.WriteLine(Label + ControlChars.Cr)
        Dim table As DataTable
   
        For Each table In dataSet.Tables
            If table.TableName.ToString = "TRX_HDR_DRI" Then
                'Console.WriteLine("TableName: " + table.TableName)
                Dim row As DataRow
                For Each row In table.Rows
                    Dim column As DataColumn
                    For Each column In table.Columns
                        Console.Write(ControlChars.CrLf & column.ColumnName.ToString & ": " & row(column).ToString())
                    Next column
                Next row
            End If
        Next table
    End Sub

Open in new window

0
vwalla
Asked:
vwalla
1 Solution
 
DhaestCommented:
Throught the getChanges, you'll only get the rows back where some column values have been changed
I don't think that these rows hold the old value and the new values.

Implement your own logic: DataTable Transaction Logger
http://www.codeproject.com/KB/database/dttl.aspx?display=PrintAll&fid=274009&df=90&mpp=25&noise=3&sort=Position&view=Quick&select=1870081
0
 
oobaylyCommented:
You could use the property that requests the DataRowVersion:
For Each row As DataRow In table.Rows
    For Each column As DataColumn In table.Columns
        If row.HasVersion(DataRowVersion.Original) Then
            Console.WriteLine("{0}: '{1}' -> '{2}'", column.ColumnName, row(column, DataRowVersion.Original), row(column))
        Else
            Console.WriteLine("{0}: '{1}' has not changed", column.ColumnName, row(column))
        End If
    Next
Next

Open in new window

0
 
vwallaAuthor Commented:
This works perfectly!  Thanks!
0

Featured Post

Keep up with what's happening at Experts Exchange!

Sign up to receive Decoded, a new monthly digest with product updates, feature release info, continuing education opportunities, and more.

Tackle projects and never again get stuck behind a technical roadblock.
Join Now