Optimization
To maximize performance and use
of bandwidth in multitier or distributed applications, it is
important to minimize the amount of data passed back and forth
between components. The GetChanges( )
method can select the data that has been
modified in a DataSet
so that only the changed
data is passed rather than the entire DataSet
. The
GetChanges( )
method returns a new
DataSet
with the same schema as the original
DataSet,
but it contains only changed records and
any related records required so that foreign key constraints
aren’t violated. These related records can be
omitted by setting the EnforceConstraints
property
of the DataSet
to false
prior
to calling GetChanges( )
.
If the data being updated contains changes after the update is
called, in cases such as AutoIncrement
field
inserts and timestamp
updates, the updated data
must also be returned to the client and reintegrated with the
original DataSet
. This is done by merging the
returned updated data back into the original
DataSet
and accepting the changes to set the
RowState
of the modified and successfully updated
rows back to Unchanged
.
The merge doesn’t, however, remove the originally
inserted rows that now have data source-generated
AutoIncrement
values. This is because the
Merge( )
method uses the primary key to
synchronize the rows. The solution is to delete inserted rows from
the original DataSet
prior to merging.
Example 15-6 demonstrates using the
GetChanges( )
method to optimize data updating between a client ...
Get ADO.NET in a Nutshell now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.