Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Erro com OracleDataReader. Erro:operação inválida. A conexão está fechada


Você deve abrir a conexão e também deve usar sql-parameters. Espero que esta seja a sintaxe correta do oráculo porque não posso testá-la:
using(var con = new OracleConnection("ConnectionString Here"))
using(var cmd = new OracleCommand("ADD YOUR INSERT/UPDATE/DELETE", con))
{
    con.Open();
    cmd.ExecuteNonQuery();
    using (var cm = new OracleCommand("select round(avg(rating),1)As AvgRating from rates where id_rec = @id", con))
    {
        cm.Parameters.AddWithValue("@id", id);
        using (var reader = cm.ExecuteReader())
        {
            if (reader.Read())
            {
                textBox5.Text = reader.GetInt16(0).ToString();
            }
        }
    }
}

Observe que eu usei o using -instrução para garantir que todos os recursos não gerenciados sejam descartados o mais rápido possível. Também fecha as conexões (mesmo em caso de erro).

Editar :Como você está selecionando apenas um único valor, sugiro usar ExecuteScalar :
using (var cm = new OracleCommand("select round(avg(rating),1)As AvgRating from rates where id_rec = @id", con))
{
    cm.Parameters.AddWithValue("@id", id);
    object avgRating = cm.ExecuteScalar();
    if (!(avgRating is DBNull))
    {
        textBox5.Text = avgRating.ToString();
    }
}