Inserire dati tabelle correlate

martedì 21 aprile 2009 - 22.39

midigooo Profilo | Newbie

Ciao a tutti,

ho due tabelle su un database SQL 2005: Regioni e Provincie, in relazione tra di loro, in modo tale che ad ogni regione possano essere associate più provincie (ho legato il campo "id" della tabella regioni ad un campo "id_regione" nella tabella provincie)
Utilizzando un winform in C# ho fatto il binding di alcuni valori della tabella Regioni a delle textbox e le provincie ad una griglia.


Se inserisco prima una regione, salvo e poi inserisco le varie provincie non ho nessun problema. Il problema nasce quando inserisco una regione, le varie provincie e salvo alla fine.

Ottengo un errore: "The INSERT statement conflicted with the FOREIGN KEY constraint "FK_Provincie_Regioni". The conflict occurred in database "TestDB", table "dbo.Regioni", column 'r_id'."

Penso il problema sia dovuto al fatto che viene scritta la tabella regioni ma poi al momento del salvataggio delle provincie non sappia l'id della relazione, ma non so come risolvere il problema.

Garzie
Ciao

alx_81 Profilo | Guru

>Ciao a tutti,
Ciao!

>Se inserisco prima una regione, salvo e poi inserisco le varie
>provincie non ho nessun problema. Il problema nasce quando inserisco
>una regione, le varie provincie e salvo alla fine.
>Ottengo un errore: "The INSERT statement conflicted with the
>FOREIGN KEY constraint "FK_Provincie_Regioni". The conflict occurred
>in database "TestDB", table "dbo.Regioni", column 'r_id'."
Eh sì, prima devi farti tornare l'id dall'inserimento della tabella regione. Se l'hai passato tu, usi quello, se invece è un Identity, puoi fartelo tornare subito dopo l'inserimento del record con la funzione SCOPE_IDENTITY().

Maggiori info qui:
http://msdn.microsoft.com/it-it/library/ms190315.aspx

>Garzie
di nulla!

--

Alessandro Alpi | SQL Server MVP

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
http://italy.mvps.org

midigooo Profilo | Newbie

Sto gestendo la cosa con due comandi di update:

this.regioniTableAdapter.Update(this.testDBDataSet.Regioni);

this.provincieTableAdapter.Update(this.testDBDataSet.Provincie);

le query non le ho scritte io sono quelle di default. sai come posso tirare fuori l'id?

alx_81 Profilo | Guru

>Sto gestendo la cosa con due comandi di update:
>
>this.regioniTableAdapter.Update(this.testDBDataSet.Regioni);
>
>this.provincieTableAdapter.Update(this.testDBDataSet.Provincie);
>
>le query non le ho scritte io sono quelle di default. sai come
>posso tirare fuori l'id?
Non puoi evitare di usare quegli oggetti dando spazio al lancio di una stored procedure? Così con T-SQL fai tutto..
Asp.net o Windows Forms?

--

Alessandro Alpi | SQL Server MVP

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
http://italy.mvps.org

midigooo Profilo | Newbie

utilizzo Windows Forms, solitamente scrivo le query di insert o select all'interno della tabella nel dataset, non ho mai utilizzato le stored procedure.

alx_81 Profilo | Guru

>utilizzo Windows Forms, solitamente scrivo le query di insert
>o select all'interno della tabella nel dataset, non ho mai utilizzato
>le stored procedure.
per modularità e comodità di questo tipo sarebbero proprio da usare
In teoria se tu metti a posto il dataset in locale e poi lanci l'aggiornamento sul db, dovrebbe arrangiarsi da solo. Però devono esserci le relazioni corrette.

Fatto sta che ti consiglio di scrivere una stored procedure in SQL Server, per nulla difficile e sfruttare la funzione che ti ho detto prima..
guarda qui:
http://technet.microsoft.com/it-it/library/ms187926.aspx

--

Alessandro Alpi | SQL Server MVP

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
http://italy.mvps.org

midigooo Profilo | Newbie

Guardo la documentazione che mi hai postato e faccio 2 prove...

Tnk...
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-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5