Похоже, вы выполняете чтение перед выполнением ExecuteNonQuery.При первом вызове SqlCommand (для SELECT) вы закрываете соединение после завершения чтения.
SqlDataReader rdr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
Удалите командное поведение, вам следует начать или заново открыть соединение в следующем операторе if.
Это
SqlDataReader rdr = cmd.ExecuteReader();
Илиэто
if (rowsReturned == true){
cn.open();