none
Eliminare record da una tabella a cui è collegata una FK RRS feed

  • Domanda

  • Salve, la mia situazione è la seguente:

    Ho 2 tabelle, diciamo A e B. B ha una chiave esterna che è collegata alla PK di A. Da codice (ASP.NET) voglio eliminare un record da A ma non me lo lascia fare. Mi dice:

    "L'istruzione DELETE è in conflitto con il vincolo REFERENCE "FK_B_A". Il conflitto si è verificato nella tabella "dbo.B", column 'ID_A' del database "DB".
    L'istruzione è stata interrotta."

    La cosa strana è che se provo da SQL Management Studio mi eliminare i record senza problemi.

    Sapreste dirmi qual è il problema?

    Grazie.

    • Spostato Irina Turcu mercoledì 10 agosto 2011 08:27 topic più adatto per il forum SQL Server (Da:Microsoft ASP.NET Forum)
    mercoledì 27 luglio 2011 14:08

Tutte le risposte

  • y_chen wrote:

    Salve, la mia situazione è la seguente:

    Ho 2 tabelle, diciamo A e B. B ha una chiave esterna che è collegata alla PK di A. Da codice (ASP.NET) voglio eliminare un record da A ma non me lo lascia fare. Mi dice:

    "L'istruzione DELETE è in conflitto con il vincolo REFERENCE "FK_B_A". Il conflitto si è verificato nella tabella "dbo.B", column 'ID_A' del database "DB". L'istruzione è stata interrotta."

    La cosa strana è che se provo da SQL Management Studio mi eliminare i record senza problemi.

    Sapreste dirmi qual è il problema?

    Grazie.

    Non stai specificando se usi ado.net, entity framework o altro per accedere al db, quindi rispondere è impossibile.

    In ogni caso asp.net non c'entra, quindi dovresti postare nel forum "adoeflinq"


    Raffaele Rialdi  http://www.iamraf.net
    Weblog: http://blogs.ugidotnet.org/raffaele
    Microsoft MVP profile https://mvp.support.microsoft.com/profile/raffaele
    UGIdotNET - http://www.ugidotnet.org/


    Raffaele Rialdi [MVP] My articles and videos: http://www.iamraf.net Italian blog: http://blogs.ugidotnet.org/raffaele
    mercoledì 27 luglio 2011 14:19
  • Come si identifica il metodo che si sta usando per accedere al DB? Io sto usando Visual Web Developer 2008 Express con Microsoft SQL Server Express 2008 R2 ed al DB ho sempre fatto accesso così:

    SqlConnection conn = new SqlConnection();
    conn.ConnectionString = "Data Source=.\\SQLEXPRESS;Initial Catalog=DB;Integrated Security=True";
    conn.Open();



    mercoledì 27 luglio 2011 14:25
  • y_chen wrote:

    Come si identifica il metodo che si sta usando per accedere al DB? Io sto usando Visual Web Developer 2008 con Microsoft SQL Server Express 2008 R2 ed al DB ho sempre fatto accesso così:

    SqlConnection conn = new SqlConnection();
    conn.ConnectionString = "Data Source=.\\SQLEXPRESS;Initial Catalog=DB;Integrated Security=True"; conn.Open();

    SqlConnection fa parte di System.Data che è parte di ADO.NET.

    Sarebbe bene che conoscessi le tecnologie prima di utilizzarle, altrimenti potresti anche bruciarti. Ci sono tanti libri che possono aiutarti in questo senso.

    Ad ogni modo questo è il forum di asp.net e visto che il tuo problema non è correlato al web, dovresti cortesemente postare nel forum corretto.


    Raffaele Rialdi  http://www.iamraf.net
    Weblog: http://blogs.ugidotnet.org/raffaele
    Microsoft MVP profile https://mvp.support.microsoft.com/profile/raffaele
    UGIdotNET - http://www.ugidotnet.org/


    Raffaele Rialdi [MVP] My articles and videos: http://www.iamraf.net Italian blog: http://blogs.ugidotnet.org/raffaele
    mercoledì 27 luglio 2011 14:34
  • è un "problema" di sql server, in caso vedi forum apposito

    Vai sulla relazione FK_B_A e nella "regola di eliminazione" metti sovrapponi se vuoi che vengano eliminati anche i figli una volta che è stato eliminato il padre, oppure le altre opzioni (nessuna azione, set null etc)

     

     

    mercoledì 27 luglio 2011 18:16
  • sei sicuro di eseguire la stessa identica query SQL?????

    L'errore che riporti è un errore SQL.
    Quindi mi pare impossibile che da Management Studio puoi cancellare e da ASP.NET no.

    Hai modificato qualcosa? le query sono identiche?


    Programamtore ASP.NET
    http://glucolo.wordpress.com
    lunedì 1 agosto 2011 15:43
  • Ciao y_chen,

    Come ti è già stato fatto notare, la tua domanda è più adatta per il forum SQL Server, quindi ho spostato il thread nel forum appropriato.

     

    Grazie per la tua comprensione,

    Irina


    Questo contenuto è distribuito “as is” e non implica alcuna responsabilità da parte di Microsoft. L'azienda offre questo servizio gratuitamente, allo scopo di aiutare gli utenti e farli aumentare la conoscenza sui prodotti e le tecnologie Microsoft.

    LinkedIn

    mercoledì 10 agosto 2011 08:27
  • "L'istruzione DELETE è in conflitto con il vincolo REFERENCE "FK_B_A". Il conflitto si è verificato nella tabella "dbo.B", column 'ID_A' del database "DB".
    L'istruzione è stata interrotta."

    La cosa strana è che se provo da SQL Management Studio mi eliminare i record senza problemi.


    Confermo il dubbio di Glauco: se è abilitato un CASCADE DELETE oppure esiste un after trigger di DELETE (anche se non è questo il caso visto che esiste un constraint FK) l'operazione deve andare a buon fine sia da ASP.NET che da SSMS.

    Ciao!


    Lorenzo Benaglia
    Microsoft MVP - SQL Server
    http://blogs.dotnethell.it/lorenzo
    http://social.technet.microsoft.com/Forums/it-IT/sqlserverit
    mercoledì 10 agosto 2011 09:24
    Moderatore