from this link:

This is simply because DataSet (or ADO.Net rather) uses Optimistic Concurrency by default.
This means that when updating, the whole row (rather than the changed column only) is used for comparison with the data in the database.
This then means that if you are trying to update a row that no longer exists in the database, the update from the DataAdapter the update will fail with the exception above.

Typical scenarios when this may happen is that you get your data into the disconnected DataSet, you do some work on it and then try the update.
However, between you selecting the data into the client and sending the update, another user is deleting this row from his application.
Or it can be that you are deleting the data from somewhere else in your application.