You need to effectively resolve data conflicts and prevent overwriting of existing data when attempting to update changes in a DataSet to a database where the underlying data has changed.
Handle the DBConcurrencyException within the RowUpdated event of the DataAdapter.
The solution uses a table named ResolveDataConflict in the database AdoDotNet35Cookbook. Execute the following T-SQL statement to create the table:
USE AdoDotNet35Cookbook GO CREATE TABLE ResolveDataConflict( Id int NOT NULL PRIMARY KEY, Field1 nvarchar(50) NULL, Field2 nvarchar(50) NULL )
The schema of table ResolveDataConflict is shown in Table 7-6.
Table 7-6. ResolveDataConflict table schema
Column name |
Data type |
Length |
Length |
|---|---|---|---|
|
|
4 |
No |
|
|
50 |
Yes |
|
|
50 |
Yes |
Execute the following T-SQL statement to create some sample data for the solution:
USE AdoDotNet35Cookbook GO INSERT INTO ResolveDataConflict VALUES (1, 'Field1.1', 'Field2.1'); INSERT INTO ResolveDataConflict VALUES (2, 'Field1.2', 'Field2.2'); INSERT INTO ResolveDataConflict VALUES (3, 'Field1.3', 'Field2.3');
The solution creates a DataTable named User 1 and fills it with the schema and data in the table ResolveDataConflict in the AdoDotNet35Cookbook database. The ContinueUpdateOnError property of the DataAdapter is set to true. A handler named daUser1_RowUpdated is assigned to the RowUpdated event of the DataAdapter. A CommandBuilder object is created to...