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
SQL Server 2000/2005/2008, Express, Access, MySQL, Oracle
Scope identity
martedì 02 ottobre 2007 - 16.39
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
_J_
Profilo
| Senior Member
273
messaggi | Data Invio:
mar 2 ott 2007 - 16:39
salve ragazzi,
vorrei ricavare lato c# l'ultimo record appena inserito in un campo identity ,e il suo valore immetterlo in una variabile di sessione..
forse ho sbagliato stanza, ma credo il problema sia nell'istruzione sql, ecco perchè ho postato qui il problema...
io ho fatto così:
string cmd = "SELECT SCOPE_IDENTITY()";
SqlConnection oConn = new SqlConnection(ConfigurationManager.ConnectionStrings["dati_generali"].ConnectionString);
SqlCommand oCommand = new SqlCommand(cmd, oConn);
try
{
oConn.Open(); //apro la connessione...
}
catch //in caso di problemi
{
oConn.Close(); //chiudi connessione
oConn.Open(); //e riapri
}
TextBox1.Text =oCommand.ExecuteScalar().ToString();
oConn.Close();
Session["cod_p"] = TextBox1.Text;//l'identity, che è pure chiave prim, mi serve nelle pagine successive
ma non funziona... come posso trattare un identity in questo caso?
_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..."
lbenaglia
Profilo
| Guru
5.625
messaggi | Data Invio:
mar 2 ott 2007 - 17:05
>vorrei ricavare lato c# l'ultimo record appena inserito in un
>campo identity ,e il suo valore immetterlo in una variabile di
>sessione..
>string cmd = "SELECT SCOPE_IDENTITY()";
>SqlConnection oConn = new SqlConnection(ConfigurationManager.ConnectionStrings["dati_generali"].ConnectionString);
>SqlCommand oCommand = new SqlCommand(cmd, oConn);
>ma non funziona... come posso trattare un identity in questo
>caso?
Ovviamente non funziona perché quel command viene eseguito in uno scope differente rispetto a quello che ha inserito l'ultima riga.
Potresti usare la funzione IDENT_CURRENT('table_name') ma te lo sconsiglio caldamente dato che otterresti una "istantanea" del valore che 1ms dopo non ti assicurerebbe più la sua validità.
Il modo migliore per gestire il problema consiste nell'incapsulare le operazioni di INSERT in stored procedure che restituisca l'ID generato IN QUELLO SCOPE tramite SCOPE_IDENTITY() come valore di ritorno o parametro di output.
Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org
Teech
Profilo
| Expert
573
messaggi | Data Invio:
mer 3 ott 2007 - 09:36
Di solito uso questo sistema
Creo un command così composto:
strSQL="INSERT INTO Tabella (Campo1_ID, Campo2) VALUES (1,'AAA');" + _
"SELECT @@IDENTITY"
Quando eseguo il command lo faccio attraverso un ExecuteScalar e mi viene restituito l'identity generato dalla INSERT...
Questo è il link per maggiori dettagli
http://technet.microsoft.com/it-it/library/ms187342.aspx
Ciao
--------------
Maurizio Brini
--------------
Nessuna impresa è mai stata compiuta da un uomo ragionevole
lbenaglia
Profilo
| Guru
5.625
messaggi | Data Invio:
mer 3 ott 2007 - 10:27
>Di solito uso questo sistema
>Creo un command così composto:
>
>strSQL="INSERT INTO Tabella (Campo1_ID, Campo2) VALUES (1,'AAA');"
>+ _
> "SELECT @@IDENTITY"
Ciao Maurizio,
Utilizzando la tecnica appena esposta, ad ogni esecuzione avverranno le fasi di analisi sintattica e semantica del comando, la sua compilazione ed esecuzione.
Incapsulando il tutto in una stored procedure avresti diversi vantaggi, alcuni dei quali sono riassunti in questi post:
http://tinyurl.com/s662
http://tinyurl.com/s664
Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org
Teech
Profilo
| Expert
573
messaggi | Data Invio:
mer 3 ott 2007 - 13:19
Grazie della dritta
--------------
Maurizio Brini
--------------
Nessuna impresa è mai stata compiuta da un uomo ragionevole
_J_
Profilo
| Senior Member
273
messaggi | Data Invio:
dom 7 ott 2007 - 13:38
ciao,
ho fatto come ha detto lbenaglia, ed in effetti si lavora molto meglio gestendo le cose con le stored...
cmq entrambi mi siete stai di grandissimo aiuto!
grazie ancora!
_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 !