Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

Recuperare l'ID dell'ultimo record inserito

Semplici passi per impostare una funzione utilissima in molti scenari d'uso
Semplici passi per impostare una funzione utilissima in molti scenari d'uso
Link copiato negli appunti

Lavorando con ASP ed i database uno dei problemi più comuni riguarda il recupero dell'ID dopo una istruzione di inserimento (tipicamente una INSERT). Lavorando con ACCESS i campi autoincrementanti sono quelli indicati come contatore, mentre su SQL Server si parla di campi con la proprietà identità attivata.

Le proprietà di questi campi sono molto semplici, si incrementano automaticamente dopo ogni inserimento e non possono contenere valori duplicati, quindi sono dei candidati ottimi ad essere chiavi primarie delle nostre tabelle.

ADO: i metodi AddNew e Update (Access)

Con ACCESS possiamo recuperare il valore di un campo contatore sfruttando il metodo .Update dopo un .AddNew, eseguendo .Update dopo avere aggiunto un record ADO (.AddNew) possiamo recuperare l'ultimo ID dal recordset attivato. Qui sotto un esempio:

Set rsUtente = Server.CreateObject("ADODB.Recordset")
rsUtente.Open "MyUsers", objConn, adOpenKeyset, adLockPessimistic, adCmdTable

rsUtente.AddNew
rsUtente("Name") = strName
rsUtente("Email") = strEmail

rsUtente.Update
intpkUID = rsUtente("ID")
Set rsUtente = nothing

ADO: Command e Store Procedure (SQL Server)

Lavorando con SQL Server e T-SQL diventa molto più semplice, infatti sfruttando la funzione globale @@IDENTITY di T-SQL possiamo recuperare l'ultimo valore indentità inserito nella nostra tabella.

Basta avere una tabella con il campo identità attivo, creare la procedura per l'inserimento dei record e recuperare l'ID attraverso un parametro di OUTPUT dalla procedura, vediamo il codice qui sotto:

CREATE PROCEDURE P_InserisciUtente
@name nvarchar(50) = '',
@email nvarchar(70) = '',
@password nvarchar(50) = '',
@UserID int OUTPUT
AS
INSERT INTO Users (name,email,password)
VALUES (@name,@email,@password)
SELECT @UserID = @@IDENTITY -- recupero l'ID

Dopo aver creato la procedura, creiamo la pagina ASP per richiamarla e recuperare l'ID appena inserito:

'Creo ADO Command Object
Set objCmd = Server.CreateObject("ADODB.Command")
objCmd.ActiveConnection = objConn ' connessione al DB
objCmd.CommandText = "P_InserisciUtente" ' nome della procedura
objCmd.CommandType = adCmdStoredProc ' definisco il tipo di comando

'Aggiungo I parametri di input alla collezione dei parametri
Set param = objCmd.CreateParameter ("name", adVarWChar, adParamInput, 50, "Luca")
objCmd.Parameters.Append param
Set param = objCmd.CreateParameter ("email", adVarWChar, adParamInput, 50, "info@lucamilan.it")
objCmd.Parameters.Append param
Set param = objCmd.CreateParameter ("password", adVarWChar, adParamInput, 50, "miapwd")
objCmd.Parameters.Append param

'Aggiungo anche il parametro di output alla collezione dei parametri
Set param = objCmd.CreateParameter ("UserID", adInteger, adParamOutput)
objCmd.Parameters.Append param

'eseguo la procedura via ADO con il metodo .execute()
objCmd.Execute

'Recupero il valore dell'ID appena inserito
Response.Write objCmd.Parameters("UserID")

Ti consigliamo anche