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 Update
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 'Aggiungo I parametri di input alla collezione dei parametri 'Aggiungo anche il parametro di output alla collezione dei parametri 'eseguo la procedura via ADO con il metodo .execute() 'Recupero il valore dell'ID appena inserito