codice:
                while (reader.Read())
                {
                    if (System.Convert.ToInt32(reader[0]) > 0)
                    {
                        //Prendiamo la quantità venduta, per sottrarla a quella che abbiamo in magazzino
                        string queryVendita = "SELECT sum(prodotti_venduti.quantita) AS venduti FROM prodotti_venduti WHERE codice = '" + reader[2].ToString() + "' AND prodotti_venduti.conta='1' GROUP BY prodotti_venduti.codice";
                        
                        SqlCommand oleCmdQuant = new SqlCommand(queryVendita, conn);

                        long venduti = System.Convert.ToInt64(oleCmdQuant.ExecuteScalar());

                        DataRow dr = ds.Tables["Merce"].NewRow();
                        dr["Codice"] = reader["artCod"].ToString();
                        dr["BarCodice"] = reader["artBar"].ToString();
                        dr["Descrizione"] = reader["artDesc"].ToString();
                        dr["Quantita"] = (System.Convert.ToInt64(reader[0]) - venduti).ToString();
                        if ((System.Convert.ToInt64(reader[0]) - venduti) > 0)
                            ds.Tables["Merce"].Rows.Add(dr);
                    }
                }
Perchè quando eseguo questo codice ho il seguente errore:

Al comando è già associato un DataReader aperto, che deve essere chiuso.
long venduti = System.Convert.ToInt64(oleCmdQuant.ExecuteScalar() ); <----- L'errore sta qua

Se chiudo il reader con close allora non da errore, ma reader mi serve per altre cose e non ha nessuna relazione con oleCmdQuant, non riesco a capire...