Look at your code:
cmd.ExecuteReader();
cmd.ExecuteNonQuery();
Because you try to perform an UPDATE using a ExecuteReader, you open a OleDbDataReader on the connection - which you then discard. When you try to then execute the same code again via ExecuteNonQuery the engine checks teh Connection, finds there is a DataReader open and refuses to do the update.
Remove the call to ExecuteReader.