Okay, so that's just a lot of text, and the question seems to be drowning in it. That's why nobody is answering I guess. So I will answer what I am guessing is the core question here: The basic idea is to get the list with sql, compare stuff and change values with C# and finally update these values with sql. So first of all you'll want to use an UPDATE query instead of removing and reinserting each row.
//So this indeed gets you the list.
OleDbCommand dbCommand = new OleDbCommand("SELECT * FROM tblUsers", this._dbConnection);
//Your reader then loops through the rows and you compare and check stuff
//Then you apply some logic, and determine what the values should be
//And then somewhere at the end of your reader loop you actually update your database like so:
OleDbCommand dbUpdateCommand = new OleDbCommand("UPDATE tblUsers " _
"SET FieldOne = @ParameterOne " _
", FieldTwo = @ParameterTwo " _
"WHERE KeyField = @ParameterThree ", this._dbConnection);
dbUpdateCommand.Parameters.Add("@ParameterOne", _
SqlDbType.NVarChar).Value = SomeVariableHoldingTheValueInQuestion;
dbUpdateCommand.ExecuteNonQuery;
N.B. You may have to use a second connection for the update (I don't remember for sure)... N.B. I used the syntax for MS SQL. You may have to adapt it to MS Access syntax, as it often uses its own slightly different version. You can check this by building a simple update query with the MS Access Query wizard / query builder. A coding tip: try to avoid using index numbers for database fields in your code: currentUser.Name = userData["UserName"].ToString(); is better than currentUser.Name = userData[0].ToString(); because otherwise when you make a change in your database table or in the query, that will change the order of the fields, and then your code will run amok. Or you will be forced to edit your code all the time, and figure out which field is which index number over and over.
My advice is free, and you may get what you paid for.