Sto provando a eseguire il seguente frammento in C# Winforms. Questo pezzo di codice funziona bene con l'adattatore pgsql 2.2.6. Quale correzione può essere fatta per funzionare correttamente con l'adattatore pgsql3.0.5? Grazie.Errore C# Winforms Npgsql 3.0.5 "Un'operazione già in corso" quando si tenta di eseguire più comandi all'interno della stessa connessione
NpgsqlConnection conn = new NpgsqlConnection(MainForm2.MyConString);
{
conn.Open();
using (NpgsqlCommand cmd = new NpgsqlCommand("SELECT rfid,name,sc_id from passenger ORDER by name", conn))
{
NpgsqlDataReader dr = cmd.ExecuteReader();
while (dr.Read())
{
var obj = new PassengerClass
{
RFID = dr.GetString(0),
Name = dr.GetString(1),
sc_id = dr.GetInt32(2)
};
s = dr.GetString(0);
try { ret.Add(s, obj); }
catch (Exception ex) { SM.Debug("Fail to add RFID Name in hash RFID:" + s + ex.ToString()); }
}
}
MainForm2.PassHash = ret;
try
{
using (NpgsqlCommand cmd = new NpgsqlCommand(string.Format("UPDATE place set useridx ={0} where useridx=0", MainForm2.userIDX), conn))
cmd.ExecuteNonQuery();
using (NpgsqlCommand cmd = new NpgsqlCommand(string.Format("UPDATE zonename set useridx ={0} where useridx=0", MainForm2.userIDX), conn))
cmd.ExecuteNonQuery();
}
catch (Exception ex)
{
SM.Debug("Error on update users IDX for place and zone with value 0 :" + ex.ToString());
}
Così, alla seconda istruzione di comando mi dà il seguente errore:
A first chance exception of type 'System.InvalidOperationException' occurred in Npgsql.dll
Additional information: An operation is already in progress.
Smaltire NpgsqlDataReader chiuderà la connessione, quindi dopo aver letto alcuni dati ho bisogno di riaprirlo? Deve essere atomicità, isolando ogni istruzione sql in un metodo diverso? Grazie. –
Smaltire NpgsqlDataReader non chiude la connessione - solo lo smaltimento della connessione lo fa. Un lettore aperto corrisponde a un comando aperto attualmente in esecuzione, che è necessario chiudere prima di eseguire un nuovo comando. Per atomicità basta avviare una transazione che comprende diversi comandi. –
Grazie. Ora funziona come un fascino. –