#665 - Accedere ad un parametro di output di una stored procedure con ADO.NET

Spesso si ha bisogno di accedere ad un parametro di ritorno di una stored procedure di SQL Server.
Ad esempio la seguente SP aggiunge la data ad una tabella e restituisce l'identity del record appena inserito:

CREATE PROCEDURE sp_NuovoUtente
@RecordID int OUTPUT
AS
BEGIN
  INSERT INTO contatore (Data) VALUES (GETDATE())

  SELECT @RecordID = @@IDENTITY
GO

Il codice C# necessario ad accedere al parametro di ritorno sarà questo:

public int Insert()
{

  using (SqlConnection conn = new SqlConnection(DataStore.strconn))
  {
    // apertura connessione

    conn.Open();
    using (SqlCommand cmd = new SqlCommand(query, conn))
    {
      cmd.CommandType = CommandType.StoredProcedure;

      // parametro di Output

      SqlParameter p1 =  new SqlParameter("@RecordID", SqlDbType.Int, 1);
      p1.Direction = ParameterDirection.Output;
      cmd.Parameters.Add(p1);

      // eseguo la query

      cmd.ExecuteNonQuery();
   
        // solo ora ho la collection popolata e posso restituire il valore

      return Convert.ToInt32(cmd.Parameters["@RecordID"].Value);
    }
  }
}

E' utile sottolineare che nel caso in cui la stored procedure restituisca anche un resulset, che andiamo ad utilizzare con un SqlDataReader, il parametro non sarà valorizzato fino al completo scorrimento dello stesso.
Questo effetto non si ha con il DataSet, che è riempito direttamente usando un DataReader.


Approfondimenti

Commenti

Esprimi il tuo giudizio su questo script:

Per procedere devi essere autenticato.

chiccosimo scrive:
#665 - Accedere ad un parametro di output di una stored procedure con ADO.NET

Scusa Daniele, ma non dovrebbe essere:SELECT @RecordID = @@scope_identity() invece di @@Identity, perchè @@Identity restituisce l'ultimo Id inserito ...
mercoledì 19 gennaio 2005 | 1 risposta

Per inserire un commento, devi registrarti alla nostra community.




IN EVIDENZA
MISC