Ciao a tutti ho una domanda, forse banale da fare...
ho una connessione SqlConnection verso la quale eseguo alcune select
Dai valori ritornato dalla query di select ottengo l'id.
Voglio eseguire per ciascuna riga tornata dalla query un update all'elemento di cui ho l'id. Il codice che scriverei è simile a quello che segue...
SqlConnection connection = new SqlConnection(stringa di connessione); //creo una connessione
int id = 0;
string sql = "SELECT id FROM...";
connection.open(); //apro la connessione
Sqlcommand cmd = new SqlCommand(sql, connection) ;
SqlDataReader res = cmd.ExecuteReader(); //eseguo la query e l'associo al reader
while (res.Read()){ //scandisco gli elementi del reader
id = (int)res["id"];
// Per ogni elemento aggiorno la relativa quantità creando una nuova query ed eseguendola
string sql2 = "UPDATE tabelal SET qta = '2' where ID='+id+'"; //più o meno cosi
sqlcommand cmd5 = new sqlcommand(sql, connection);
cmd5.executeNonquery();
....
}
Il codice non funziona l'errore riporta che la connessione connection è già aperta dal reader e che dovrei prima chiuderlo... ma se lo chiudo perdo la condizione per il ciclo sugli elementi cercati precedentemente... che fare?
Ho risolto tramite l'esecuzione di una funzione esterna che si occupa di fare l'update creando per se una nuova connessione etc etc...
Ma è necessario? Ogni volta che faccio una query di ricerca e poi devo fare un update o un insert devo necessariamente avere connessioni separate al db? Devo quindi sempre aprire e chiudere le connessioni?
suggerimenti? spiegazioni?
grazie
Simone