Oracle
 sql >> Base de données >  >> RDS >> Oracle

Impossible de supprimer dans la base de données en raison de contraintes

La meilleure façon de le faire est d'utiliser une procédure stockée plutôt qu'une instruction sql dans le code C#. Vous obtenez une erreur car les enregistrements référencés sont toujours présents dans la table référencée et utilisent cmd.ExecuteReader(); plutôt que cmd.ExecuteNonQuery(); . Vous devez donc supprimer les enregistrements pour DBS2_MOVIE WHERE MOVIE_ID = :AccountID de toutes les tables où il y a une contrainte pour que la table DBS2_MOVIE soit présente.

Le code suivant peut vous aider :

CREATE OR REPLACE PROCEDURE Delete_DBS2_MOVIE(p_MOVIE_ID IN DBS2_MOVIE.MOVIE_ID%TYPE)
IS
BEGIN

  --First delete p_MOVIE_ID from all the table where there is a constraint on DBS2_MOVIE 
  --i.e. all the constraints you are getting error for
  DELETE FROM XXX WHERE MOVIE_ID = p_MOVIE_ID

  DELETE FROM DBS2_MOVIE WHERE MOVIE_ID = p_MOVIE_ID;

END;

Modifiez votre code C# comme :

public bool DeleteMovie(int MovieID)
{


    string sql = "Delete_DBS2_MOVIE";
    try
    {

        this.Connect();
        OracleCommand cmd = new OracleCommand(sql, this.connection);

        cmd.Parameters.Add(new OracleParameter("p_MOVIE_ID", MovieID));
        cmd.CommandType = System.Data.CommandType.StoredProcedure;

        cmd.ExecuteNonQuery();


    }
    catch (Exception e)
    {
        Console.WriteLine(e.Message);
        throw;
    }
    finally
    {
        this.connection.Close();
    }

    return true;
}