Framework 2.0 e Sql Server 2005 / 2000
Invece di costruirmi la stringa sql concatenando i vari valori utilizzo i parametri e poi dopo aver assegnato al SlqCommand il commandText aggiungo i vari parametri, tutto funziona bene tranne che se poi eseguo un "select SCOPE_IDENTITY() " mi torna sempre Null.
Con SqlProfiler ho visto che vengono eseguite queste due istruzioni:
exec sp_executesql N'INSERT INTO testTrigger (tipo, data) VALUES (@Insert0, @Insert1)',N'@Insert0 nvarchar(15),@Insert1 nvarchar(15)',@Insert0=N'new insert tipo',@Insert1=N'new insert tipo'
SELECT SCOPE_IDENTITY()
Effettivamente se le lancio anche direttamente da SqlServer la funzione mi trona semrpe Null, immagino perchè non consideri le due istruzioni nello stesso "ambito", infatti se invece delle due righe sopra eseguo queste:
INSERT INTO testTrigger (tipo, data) VALUES ('new insert tipo', 'new insert tipo')
SELECT SCOPE_IDENTITY()
La funzione mi torna regolarmente l'identity.
considerato che:
- devo utilizzare l'esecuzione con i parametri aggiungendoli al command
- non posso utilizzare @@IDENTITY perchè potrei avere Triger for insert con altri insert
- non posso utilizzare IDENT_CURRENT('testTrigger') perchè potrebbero esserci più insert contemporanei
qualcuno ha suggerimenti per aggirare il problema?
Speravo che in SqlCommand,SqlConnection o SqlTransaction ci fosse qualche proprietà che mi restituisse l'identity ma non ho trovato niente
--
Claudio P.
======================================================
A chi interessa ho risolto in questo modo.
Ho aggiunto alla mia stringa sql "Select @UltimoID=SCOPE_IDENTITY()" e al Command ho aggiunto unparametro i Output:
param = New SqlParameter()
param.ParameterName = "@UltimoId"
param.Direction = ParameterDirection.Output
param.Size = 50
Comm.Parameters.Add(param)
Dopo aver eseguito il command mi recupero il valore del parametro di output:
Comm.Parameters("@UltimoId").Value