Scope_identity rstituisce 0

giovedì 06 settembre 2007 - 08.16

flytouch Profilo | Junior Member

Arieccomi qua qualche anima pia, puo dirmi come mai la scope identity non mi ritona il valore dell'id? Avete qualche suggerimento?
Grazie

lbenaglia Profilo | Guru

>Arieccomi qua qualche anima pia, puo dirmi come mai la scope
>identity non mi ritona il valore dell'id? Avete qualche suggerimento?

Nell'altro thread ti ho indicato un link con un esempio di codice FUNZIONANTE.
L'hai provato? Funziona anche a te? Quali sono le differenze tra il mio codice ed il tuo?

Ciao!

--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

flytouch Profilo | Junior Member

Ciao Lorenzo,
si ho seguito il tuo esempio molto attentamente piu' volte ti devo dire.
Non capisco come mai mi esegue la stored perfettamente fino a quando incontra lo scope_identity, il quale mi ritorna come valore 0; ho il dubbio che sia la stored a non funzionare correttamente quando arriva a quel punto.
Mi sono scritto un response.write per appunto vedere se mi intercetta il valore dell'id in questione ma come ti ho gia detto mi da zero.

dim param as sqlparameter
param = New SqlParameter()
param= cmdinsert.parameters.add("@IDabbonato",SqldbType.int)
param.Direction = ParameterDirection.Output
param.Size = 50


dim numeretto as integer
If Not IsDbNull (cmdinsert.parameters("@IDAbbonato").value) then
numeretto=cmdinsert.parameters("@IDAbbonato").value
else
numeretto = "null"
end if
response.write(numeretto)

Questa e la stored:
CREATE PROCEDURE INSCO(
@ragionesociale VARCHAR(50),
@nome VARCHAR(50),
@cognome VARCHAR(50),
@indirizzo VARCHAR(100),
@cap int,
@comune VARCHAR(50),
@pv VARCHAR(5),
@partitaiva int,
@telefono int,
@emailabbonato VARCHAR(50),
@dtcandidatura datetime,
@des01 VARCHAR(3000),
@IDAbbonato int OUTPUT
)
AS
BEGIN
Insert into Abbonati(ragionesociale,nome,cognome,indirizzo,cap,comune,pv,partitaiva,telefono,emailabbonato,dtcandidatura,des01)
values (@ragionesociale,@nome,@cognome,@indirizzo,@cap,@comune,@pv,@partitaiva,@telefono,@emailabbonato,@dtcandidatura,@des01);
SET @IDabbonato = SCOPE_IDENTITY();
END

Grazie in advance

lbenaglia Profilo | Guru

>si ho seguito il tuo esempio molto attentamente piu' volte ti
>devo dire.
E funziona da te?

>Non capisco come mai mi esegue la stored perfettamente fino a
>quando incontra lo scope_identity, il quale mi ritorna come valore
>0;
> dim param as sqlparameter
> param = New SqlParameter()
>param= cmdinsert.parameters.add("@IDabbonato",SqldbType.int)
> param.Direction = ParameterDirection.Output
> param.Size = 50

Perché param.Size = 50?!
La dimensione di un int è di 4 bytes.

>
> dim numeretto as integer
>If Not IsDbNull (cmdinsert.parameters("@IDAbbonato").value) then
>numeretto=cmdinsert.parameters("@IDAbbonato").value
> else
> numeretto = "null"
> end if
> response.write(numeretto)

Manca la .ExecuteNonQuery()!!!
La sp non l'hai ancora eseguita e il valore di default della variabile numeretto è appunto 0.

--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

flytouch Profilo | Junior Member

No no c'e' c'e'
ti incollo il tutto
Dim variabile as integer

Try

conn.Open()
variabile= cmdInsert.ExecuteNonQuery()
Catch exc as Exception
output.innerhtml = err.description & "<br>" & StrInsert
conn.Close()

Exit Sub

End Try

output.innerhtml = "Le vostre informazioni sono state inserite correttamente"

l'ho omesso perche non mi sembrava importante

lbenaglia Profilo | Guru

>l'ho omesso perche non mi sembrava importante
Sigh...

Se esegui la sp via SSMS o Query Analyzer, cosa ottieni?
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

flytouch Profilo | Junior Member

Con Analizza nessun errore ti allego immagine:

1168x790 109Kb

Con Esegui mi da questo errore:
Messaggio 2714, livello 16, stato 3, procedura INSCO, riga 20
Nel database esiste già un oggetto con il nome 'INSCO'.

1168x790 113Kb

lbenaglia Profilo | Guru

>Con Analizza nessun errore ti allego immagine:
>Con Esegui mi da questo errore:
>Messaggio 2714, livello 16, stato 3, procedura INSCO, riga 20
>Nel database esiste già un oggetto con il nome 'INSCO'.

LOL
Con ESEGUI intendo richiamare la sp!!

DECLARE @var int; EXEC sp 'pippo', 'pluto', 'paperino', ..., @var OUTPUT; SELECT @var;
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

flytouch Profilo | Junior Member

Tu intendi mettendo dei valori cosa riporta la sp?
scsa ma ci sto capendo piu poco :(

lbenaglia Profilo | Guru

>Tu intendi mettendo dei valori cosa riporta la sp?
>scsa ma ci sto capendo piu poco :(
Sto cercando di capire se hai commesso gli errori nella definizione della sp, nel codice client che la richiama o da entrambe le parti
Inizia ad eseguire la stored procedure (si tratta di fare una BANALISSIMISSIMA EXEC della sp) e guarda se la riga viene inserita nella tabella e se viene restituito il valore autogenerato per la colonna IDENTITY...

--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

flytouch Profilo | Junior Member

Si scusami la pausa mi ha un rimesso in carreggiata
Comunque l'ho fatta e funziona, mi restituisce un valore ti incollo l'immagine

1168x926 94Kb

Adesso vedo se c'e la nuvoletta di fantozzi sopra casa
Non capisco cosa sbaglio a sto punto

aspetta ho visto che si capisce poco dall'imagine ti incollo il tutto:

declare @IDAbbonato int;
exec insco
'pippo','pluto','giuan','indiris',15011,'comu','aq',123456,0147,'info',01012007,'nota',@IDAbbonato OUTPUT;
SELECT @IDAbbonato

(Righe interessate: 1)

-----------
102

(Righe interessate: 1)

Ed e giusto

lbenaglia Profilo | Guru

>SELECT @IDAbbonato
>
>(Righe interessate: 1)
>
>-----------
>102
>
>(Righe interessate: 1)
>
>Ed e giusto

Ottimo, quindi significa che l'errore lo commetti nel codice .NET.
Ora, fai il bravo , leggi BENE l'esempio che ti ho suggerito diverse volte, BUTTA VIA TUTTO IL TUO CODICE .NET, e riscrivilo DA 0 utilizzando la tecnica proposta.

Ciao!

--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org
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