Here is a mock-up example where the SQL is omitted, the values being returned are set from whatever query to run.
CREATE PROCEDURE [dbo].[uspDummy]
@FirstName nvarchar(50) OUT,
@LastName nvarchar(200)OUT,
@Identity int OUT
AS
BEGIN
SET NOCOUNT ON;
/*
one or more queries go here
*/
SET @Identity = 100
SET @FirstName = N'Karen'
SET @LastName = N'Payne'
END
After ExecuteNonQuery in read the parameter values
public void CodeSample()
{
string connectionString = "Data Source=.\\SQLEXPRESS;Initial Catalog=CustomerDatabase;" +
"Integrated Security=True";
using (var cn = new SqlConnection(connectionString))
{
using (var cmd = new SqlCommand() {Connection = cn})
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "[uspDummy]";
cmd.Parameters.Add(new SqlParameter()
{
Direction = ParameterDirection.Output,
ParameterName = "@Identity",
SqlDbType = SqlDbType.Int
});
cmd.Parameters.Add(new SqlParameter()
{
Direction = ParameterDirection.Output,
ParameterName = "@FirstName",
SqlDbType = SqlDbType.NVarChar,
Size = 255
});
cmd.Parameters.Add(new SqlParameter()
{
Direction = ParameterDirection.Output,
ParameterName = "@LastName",
SqlDbType = SqlDbType.NVarChar,
Size = 255
});
cn.Open();
cmd.ExecuteNonQuery();
Console.WriteLine(cmd.Parameters["@Identity"].Value);
Console.WriteLine(cmd.Parameters["@FirstName"].Value);
Console.WriteLine(cmd.Parameters["@LastName"].Value);
}
}
}