Intercettare evento "The DELETE statement conflicted with the REFERENC...

venerdì 26 settembre 2008 - 08.36

falk83 Profilo | Newbie

Ciao a tutti,

Ho una tabella fornitori e manutenzioni, se elimino un fornitore che ha eseguito una manutenzione naturalmente mi da errore,
come posso fare per intercettare l'errore e di seguito avvisare l'utente tramite messageBox? (window form + C#)

Grazie
ciao

Brainkiller Profilo | Guru

>Ciao a tutti,
>Ho una tabella fornitori e manutenzioni, se elimino un fornitore
>che ha eseguito una manutenzione naturalmente mi da errore,
>come posso fare per intercettare l'errore e di seguito avvisare
>l'utente tramite messageBox? (window form + C#)

Eh, come è strutturata la winform ? Che cosa hai utilizzato, oggetti, tecnologia per l'accesso ai dati, binding ecc. ?

Ma tu vuoi cancellare i record collegati oppure no ? Perchè in quel caso puoi abilitare il cascade delete a livello di DB e quindi quando cancelli il record padre, partono anche i figli.
Ciao

David De Giacomi | Microsoft MVP
http://blogs.dotnethell.it/david/

beeryourself Profilo | Newbie

vero, ho anche io questo tipo di problema...
ho una tabella Gruppi e una Categorie. All'interno di Categorie c'è un attributo id_gruppi che serve a identificare la categoria come appartenente a un gruppo specifico. Ho creato la ForeignKey e ho impostato il vincolo di Delete in Cascade dal DataSet però non funziona mai, cioè quando elimino un gruppo che ha delle categorie associate ritorna l'eccezione del conflitto.
Se faccio la stessa operazione direttamente nel db in Access nessun problema...

Brainkiller Profilo | Guru

>come appartenente a un gruppo specifico. Ho creato la ForeignKey
>e ho impostato il vincolo di Delete in Cascade dal DataSet però
>non funziona mai, cioè quando elimino un gruppo che ha delle
>categorie associate ritorna l'eccezione del conflitto.
>Se faccio la stessa operazione direttamente nel db in Access
>nessun problema...

Prova a consultare questa pagina, vai in basso dove c'è un messaggio:
http://msdn.microsoft.com/en-us/library/st1t2c35.aspx
e leggi che presenta il tuo stesso problema con relativa spiegazione.

Da ciò che ho capito se c'è il Cascade Delete attivo sia a livello di DataSet che di DB ti dà errore di conflitto.

Magari trattasi di questo.

Ciao

David De Giacomi | Microsoft MVP
http://blogs.dotnethell.it/david/

falk83 Profilo | Newbie

Ho usato BindingSource e tutto il resto..:

this.fornitoreBindingSource.EndEdit();
this.fornitoreTableAdapter.Update(this.inventarioDataSet.fornitore);
this.fornitoreBindingSource.ResetBindings(false);

No io non voglio fare il delete on cascade, ma intercettare questo evento e comunicarlo all'utente tramite MessageBox e annunciarli che non può cancellare il fornitore (in questo caso).

ciao ciao

Brainkiller Profilo | Guru

>this.fornitoreBindingSource.EndEdit();
>this.fornitoreTableAdapter.Update(this.inventarioDataSet.fornitore);
>this.fornitoreBindingSource.ResetBindings(false);
>No io non voglio fare il delete on cascade, ma intercettare questo
>evento e comunicarlo all'utente tramite MessageBox e annunciarli
>che non può cancellare il fornitore (in questo caso).

Io penso che puoi mettere tutto in un try..catch..exception e nell'Exception andare a gestire il tipo di eccezione e visualizzare l'errore all'utente.

Oppure verifica fornitoreTableAdapter dovrebbe esporre eventi che scattano nel caso ci sono errori durante l'operazione eseguita. In quel caso ti agganci all'evento e gestisci l'errore.

Ciao
David De Giacomi | Microsoft MVP
http://blogs.dotnethell.it/david/
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2023
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5