Non tutte le stored procedure ritornato informazioni da un result set, infatti molte procedures restituiscono dati attraverso i parametri di output. Per recuperare i dati provenienti da parametri di output di una stored procedure bisogna utilizzare la proprietà Direction dell'oggetto Parameter. Tale proprietà accetta 4 enumerati che sono:<<ReturnValue, Input, InputOutput, e Output>>. La proprietà predefinità è impostata su input, per riuscire a leggere i dati presenti nei parametri basta impostare la proprietà Direction con gli enumerati ReturnValue, InputOutput o Output. Supponendo una stored del sottostante tipo
CREATE PROCEDURE GetCliente (@IDCliente nchar(5),
@Nome nvarchar(40) OUTPUT,
@Cognome nvarchar(30) OUTPUT,) AS
SELECT @Nome = Nome, @Cognome = Cognome
FROM Clienti WHERE IDCliente = @IDCliente
IF @@ROWCOUNT = 1
RETURN 0
ELSE
RETURN -1
//Il codice per recuperare i parametri di output è il segunte
...
SqlConnection cn = new SqlConnection(strConn);
cn.Open();
SqlCommand cmd = cn.CreateCommand();
cmd.CommandText = "{? = CALL GetCliente(?, ?, ?, ?)}";
cmd.Parameters.Add("@RetVal", SqlDbType.Int);
cmd.Parameters.Add("@IDCliente", SqlDbType.VarChar, 5);
cmd.Parameters.Add("@Nome", SqlDbType.VarChar, 40);
cmd.Parameters.Add("@Cognome", SqlDbType.VarChar, 30);
cmd.Parameters["@RetVal"].Direction = ParameterDirection.ReturnValue;
cmd.Parameters["@IDCliente"].Value = "PR1MO";
cmd.Parameters["@Nome"].Direction = ParameterDirection.Output;
cmd.Parameters["@Cognome"].Direction = ParameterDirection.Output;
cmd.ExecuteNonQuery();
if (Convert.ToInt32(cmd.Parameters["@RetVal"].Value) == 0)
Console.WriteLine(cmd.Parameters["@Cognome"].Value);
else
Console.WriteLine("Customer not found");