Recuperare l'ultimo valore inserito in una colonna Identity utilizzando SqlDataSource

di Marco Leoncini, in ASP.NET 2.0, DataBinding, 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.

Commenti

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Approfondimenti

I più letti di oggi