Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Błąd w OracleDataReader. Błąd:nieprawidłowa operacja. Połączenie jest zamknięte

Powinieneś otworzyć połączenie i powinieneś również użyć parametrów sql. Mam nadzieję, że jest to poprawna składnia oracle, ponieważ nie mogę jej przetestować:

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();
            }
        }
    }
}

Zauważ, że użyłem using — oświadczenie, aby zapewnić, że wszystkie niezarządzane zasoby zostaną usunięte tak szybko, jak to możliwe. Zamyka również połączenia (nawet w przypadku błędu).

Edytuj :Ponieważ wybierasz tylko jedną wartość, sugeruję użycie 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();
    }
}


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Zmień wstawioną wartość za pomocą wyzwalacza

  2. najlepszy sposób na śledzenie zmian danych w Oracle

  3. Jak stworzyć widok w Oracle

  4. PLSQL JDBC:Jak uzyskać identyfikator ostatniego wiersza?

  5. Łączenie się z Oracle za pomocą ADO