Recuperare l'ultimo valore inserito in una colonna Identity utilizzando SqlDataSource
Il control SqlDataSource risulta estremamente rapido e comodo per la sua capacità di generare in automatico le query di Insert, Update e Delete, partendo da quella di Select.
Benché le query risultino adeguate per la maggior parte dei casi, per recuperare l'ultimo valore inserito per una colonna identity è necessario apportare alcune piccole modifiche.
Per prima cosa modifichiamo la query di Insert:
<asp:SqlDataSource ID="SqlDataSource1" InsertCommand="INSERT INTO [MokTable] ([Name]) VALUES (@Name) SET @ID = SCOPE_IDENTITY()" ... />
Successivamente aggiungiamo un parametro di output per contenere il valore Identity appena aggiunto:
<InsertParameters> <asp:Parameter Name="ID" Type="Int32" Direction="Output"/> <asp:ControlParameter ControlID="NameTextBox" Type="string" Name="Name" PropertyName="Text" /> </InsertParameters>
Infine, per recuperare il valore dal parametro creiamo un Event Handler per l'evento Inserted:
protected void SqlDataSource1_Inserted(object sender, SqlDataSourceStatusEventArgs e) { if (e.Exception == null) { int lastID = (int)e.Command.Parameters["@ID"].Value; this.IdLabel.Text = string.Format("Record inserito con successo: id {0}", lastID); } else { e.ExceptionHandled = true; this.IdLabel.Text = "Si è verificato un errore"; } }
Nel metodo ci limitiamo a recuperare dall'oggetto SqlDataSource il parametro ID dalla collezione Parameters. Questo trucco vale anche nel caso in cui sia necessario leggere il valore di ritorno di una stored procedure.







