Home Page
Articoli
Tips & Tricks
News
Forum
Archivio Forum
Blogs
Sondaggi
Rss
Video
Utenti
Chi Siamo
Contattaci
Username:
Password:
Login
Registrati ora!
Recupera Password
Home Page
Stanze Forum
ASP.NET 2.0 / 3.5 / 4.0
Due insert insieme
lunedì 06 agosto 2007 - 09.33
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
_J_
Profilo
| Senior Member
273
messaggi | Data Invio:
lun 6 ago 2007 - 09:33
ciao ragazzi,
dovrei fare una operazione di questo tipo:
ho tre tabelle: 'cittadino'e 'nucleo familiare' collegate mediante la tabella 'appartiene'.
i campi sono (ne elenco solo alcuni):
cittadino
-------------
cod_persona
cognome
nome
appartiene
----------------
cod_persona
cod_nf
data_inserimento
nucleo familiare
--------------------
cod_nf
tipo_nf
ho realizzato alcune insert nel caso di nuovo cittadino o nuova famiglia 'separatamente', nel senso che i nuovi record che inserisco nella tabella 'cittadino' trattano il caso di cittadini che non appartengono ad alcuna famiglia, e i recod che inserisco nella tabella
'nucleo familiare' trattano il caso di famiglie che non hanno componenti.. devo infatti modificare la tabella 'appartiene' se voglio abbinare cittadini e famiglie...
quello che voglio fare io è creare una nuova famiglia direttamente mediante la creazione del cittadino, cioè sarebbe una insert su 'cittadino' + una insert su 'appartiene'
il problema è che non saprei come gestire la query, cioè come imporre a 'appartiene'. 'cod_persona' il valore appena creato di 'cittadino'.cod_persona'
non so se mi sono spiegato bene, spero di sì..
qualcuno di voi potrebbe aiutarmi?
_J_
"Chi fa domande rischia di sembrare stupido,
chi non ne fa rischia di restare stupido..."
"Conosco me stesso? No, non parlo con gli estranei..."
alx_81
Profilo
| Guru
8.814
messaggi | Data Invio:
lun 6 ago 2007 - 10:11
>ciao ragazzi,
Ciao!
>
>dovrei fare una operazione di questo tipo:
>ho tre tabelle: 'cittadino'e 'nucleo familiare' collegate mediante
>la tabella 'appartiene'.
>i campi sono (ne elenco solo alcuni):
>
>cittadino
>-------------
>cod_persona
>cognome
>nome
>
>appartiene
>----------------
>cod_persona
>cod_nf
>data_inserimento
>
>nucleo familiare
>--------------------
>cod_nf
>tipo_nf
>
>
>ho realizzato alcune insert nel caso di nuovo cittadino o nuova
>famiglia 'separatamente', nel senso che i nuovi record che inserisco
>nella tabella 'cittadino' trattano il caso di cittadini che non
>appartengono ad alcuna famiglia, e i recod che inserisco nella
>tabella 'nucleo familiare' trattano il caso di famiglie che non hanno
>componenti.. devo infatti modificare la tabella 'appartiene'
>se voglio abbinare cittadini e famiglie...
>quello che voglio fare io è creare una nuova famiglia direttamente
>mediante la creazione del cittadino, cioè sarebbe una insert
>su 'cittadino' + una insert su 'appartiene'
>il problema è che non saprei come gestire la query, cioè come
>imporre a 'appartiene'. 'cod_persona' il valore appena creato
>di 'cittadino'.cod_persona'
Ti devi scrivere una stored procedure che fa tutto quello che ti serve..
di che tipo è il campo cod_persona? è identity?
se sì, puoi usare nella stored la funzione SCOPE_IDENTITY() per capire l'ultimo id inserito ed usarlo nella insert successiva.
>
>_J_
>
>"Chi fa domande rischia di sembrare stupido,
>chi non ne fa rischia di restare stupido..."
>
>"Conosco me stesso? No, non parlo con gli estranei..."
Alx81 =)
http://blogs.dotnethell.it/suxstellino
_J_
Profilo
| Senior Member
273
messaggi | Data Invio:
lun 6 ago 2007 - 14:38
ciao alx!
purtroppo il campo cod_persona non è identity.. in questo caso ci sarebbe qc altra soluzione o l'identity devo farlo per forza?
cmq la stored di base sarebbe questa:
create PROCEDURE ins_nuovo_citt_in_nuova_fam
(
@cod_p_citt int,
@cognome varchar(30),
@nome varchar(30),
@cod_p_appartiene int,
@cod_nf int,
@data_ins datetime
)
AS
insert into cittadino
( cod_persona,
cognome,
nome
)
values
(
@cod_p_citt,
@cognome,
@nome
)
insert into appartiene
(
cod_persona,
cod_nucleo_familiare,
data_inserimento_in_nf_conv
)
values
(
@cod_p_appartiene,
@cod_nf,
@data_ins
)
RETURN
a parte lo scope_identity(), è corretta?
_J_
"Chi fa domande rischia di sembrare stupido,
chi non ne fa rischia di restare stupido..."
"Conosco me stesso? No, non parlo con gli estranei..."
alx_81
Profilo
| Guru
8.814
messaggi | Data Invio:
lun 6 ago 2007 - 14:47
>ciao alx!
>purtroppo il campo cod_persona non è identity.. in questo caso
>ci sarebbe qc altra soluzione o l'identity devo farlo per forza?
ma non puoi usare lo stesso parametro che usi per la prima insert?
se deve essere lo stesso valore.. non vedo il problema..
Alx81 =)
http://blogs.dotnethell.it/suxstellino
_J_
Profilo
| Senior Member
273
messaggi | Data Invio:
lun 6 ago 2007 - 14:52
posso farlo? non l'ho fatto perchè credevo ci sarebbero stati problemi di tempistica tra le due insert!
_J_
"Chi fa domande rischia di sembrare stupido,
chi non ne fa rischia di restare stupido..."
"Conosco me stesso? No, non parlo con gli estranei..."
alx_81
Profilo
| Guru
8.814
messaggi | Data Invio:
lun 6 ago 2007 - 17:09
>posso farlo? non l'ho fatto perchè credevo ci sarebbero stati
>problemi di tempistica tra le due insert!
no.. sono una dopo l'altra
>_J_
>
>"Chi fa domande rischia di sembrare stupido,
>chi non ne fa rischia di restare stupido..."
>
>"Conosco me stesso? No, non parlo con gli estranei..."
Alx81 =)
http://blogs.dotnethell.it/suxstellino
_J_
Profilo
| Senior Member
273
messaggi | Data Invio:
lun 6 ago 2007 - 17:34
allora, quello dei due insert che ho postato era uno schema per capire come dovessi gestire certe situazioni, ma ora che ho provato ad usarlo nella realtà sto incontrando problemi.
la stored che uso è questa:
ALTER PROCEDURE dbo.nuova_fam_da_nuovo_cittadino
(
@cod_nf int,
@data_c datetime, /*lo uso per entrambe le date di inserimento nelle due diverse tabelle
@tipo int,
@data_s datetime,
@ultimo_ind int,
@cod_p int,
@cod_parent int,
@data_r datetime,
@cond varchar(1)
)
AS
INSERT INTO nucleo_fam_e_convivenze //prima creo la famiglia
(
cod_nucleo_familiare,
data_creazione, //uso @data_c
tipo_nucleo,
data_scissione
)
VALUES (@cod_nf,@data_c,@tipo,@data_s)
set @ultimo_ind=scope_identity() /*per l'indice nel ruolo_in_nf_o_conviv*/
insert ruolo_in_nf_o_conviv //e poi ci inserisco il cittadino appena creato
(
cod_persona,
cod_nucleo_familiare , //uso @ultimo_ind per abbinare al cittadino appena creato la famiglia nuova che si sta creando
cod_parentela_con_is_o_cc,
data_inserimento_in_nf_conv, //uso @data_c
data_rimoz_da_nf_conv,
condizione_in_nf_conv
)
values (@cod_p,@ultimo_ind, @cod_parent, @data_c,@data_r,@cond)
return
ma a runtime mi dice 'formato della stringa di input non corretto', e penso che la colpa sia di @ultimo_ind (quello dello scope_identity) che tra i parametri NON dichiaro (sinceramente non sapre da dove prenderlo visto che con scope_identity dovrebbe farlo lui), infatti nel file c# i parametri sono:
SqlDataAdapter adatt = new SqlDataAdapter(tutti, oConn);
adatt.SelectCommand.CommandType = CommandType.StoredProcedure;
adatt.SelectCommand.Parameters.Add(new SqlParameter("@cod_nf", SqlDbType.Int));
adatt.SelectCommand.Parameters.Add(new SqlParameter("@data_c", SqlDbType.DateTime));
adatt.SelectCommand.Parameters.Add(new SqlParameter("@tipo", SqlDbType.Int));
adatt.SelectCommand.Parameters.Add(new SqlParameter("@data_s", SqlDbType.DateTime));
adatt.SelectCommand.Parameters.Add(new SqlParameter("@cod_p", SqlDbType.Int));
adatt.SelectCommand.Parameters.Add(new SqlParameter("@cod_parent", SqlDbType.Int));
adatt.SelectCommand.Parameters.Add(new SqlParameter("@data_r", SqlDbType.DateTime));
adatt.SelectCommand.Parameters.Add(new SqlParameter("@cond", SqlDbType.VarChar, 1));
adatt.SelectCommand.Parameters["@cod_nf"].Value = Server.HtmlEncode(TextBox35.Text);
adatt.SelectCommand.Parameters["@data_c"].Value = DateTime.Now;
adatt.SelectCommand.Parameters["@tipo"].Value = Server.HtmlEncode(Label5.Text);
adatt.SelectCommand.Parameters["@data_s"].Value = DBNull.Value;
adatt.SelectCommand.Parameters["@cod_p"].Value = Server.HtmlEncode(TextBox1.Text);
adatt.SelectCommand.Parameters["@cod_parent"].Value = "IS";
adatt.SelectCommand.Parameters["@data_r"].Value = DBNull.Value;
adatt.SelectCommand.Parameters["@cond"].Value = Server.HtmlEncode(Label4.Text);
adatt.SelectCommand.ExecuteNonQuery();
oConn.Close();
cosa posso fare?
_J_
"Chi fa domande rischia di sembrare stupido,
chi non ne fa rischia di restare stupido..."
"Conosco me stesso? No, non parlo con gli estranei..."
nullatore
Profilo
| Junior Member
191
messaggi | Data Invio:
lun 6 ago 2007 - 21:46
[occhio _J_ che questa tematica è piu' consona ad una area del tipo SQL (
http://www.dotnethell.it/forum/SQL-Server-MySQL-Access.aspx
)]
Ciao
~nullatore~
mai dire corto circuito virtuale
_J_
Profilo
| Senior Member
273
messaggi | Data Invio:
lun 6 ago 2007 - 22:02
ok, proverò ad esporre il mio problema nel topic che mi hai suggerito tu
graaassssie
_J_
"Chi fa domande rischia di sembrare stupido,
chi non ne fa rischia di restare stupido..."
"Conosco me stesso? No, non parlo con gli estranei..."
_J_
Profilo
| Senior Member
273
messaggi | Data Invio:
mar 7 ago 2007 - 11:01
il problema è stato risolto (
)... a chi interessasse ecco il link del thread:
http://www.dotnethell.it/forum/messages.aspx?ThreadID=17227
ciao!
_J_
"Chi fa domande rischia di sembrare stupido,
chi non ne fa rischia di restare stupido..."
"Conosco me stesso? No, non parlo con gli estranei..."
Torna su
Stanze Forum
Elenco Threads
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 !