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.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.