Używanie parametrów wyjściowych procedury składowanej w C #

Mam problem zwracając parametr wyjściowy z procedury przechowywanej Sql Server do zmiennej C #. Przeczytałem inne posty na ten temat, nie tylko tutaj, ale na innych stronach, i nie mogę go uruchomić. Oto, co mam obecnie. Obecnie próbuję wydrukować wartość, która wraca. Poniższy kod zwraca wartość pustą. To, co próbuję zwrócić, to klucz podstawowy. Próbowałem użyć@@IDENTITY iSCOPE_INDENTITY() (to znaczy.SET @NewId = SCOPE_IDENTITY()).

Procedura składowana:

CREATE PROCEDURE usp_InsertContract
    @ContractNumber varchar(7),

    @NewId int OUTPUT
AS
BEGIN

    INSERT into [dbo].[Contracts] (ContractNumber)
        VALUES (@ContractNumber)

    Select @NewId = Id From [dbo].[Contracts] where ContractNumber = @ContractNumber
END

Otwieranie bazy danych:

pvConnectionString = "Server = Desktop-PC\\SQLEXPRESS; Database = PVDatabase; User ID = sa;
    PASSWORD = *******; Trusted_Connection = True;";

try
{
    pvConnection = new SqlConnection(pvConnectionString);
    pvConnection.Open();
}
catch (Exception e)
{
    databaseError = true;
}

Wykonanie polecenia:

pvCommand = new SqlCommand("usp_InsertContract", pvConnection);

pvCommand.Transaction = pvTransaction;
pvCommand.CommandType = CommandType.StoredProcedure;    

pvCommand.Parameters.Clear();
pvCommand.Parameters.Add(new SqlParameter("@ContractNumber", contractNumber));

SqlParameter pvNewId = new SqlParameter();
pvNewId.ParameterName = "@NewId";
pvNewId.DbType = DbType.Int32;
pvNewId.Direction = ParameterDirection.Output;
pvCommand.Parameters.Add(pvNewId);

try
{
    sqlRows = pvCommand.ExecuteNonQuery();

    if (sqlRows > 0)
        Debug.Print("New Id Inserted =  ", 
            pvCommand.Parameters["@NewId"].Value.ToString()); 
    }
    catch (Exception e)
    {
        Debug.Print("Insert Exception Type: {0}", e.GetType());
        Debug.Print("  Message: {0}", e.Message);
    }
}

questionAnswers(4)

yourAnswerToTheQuestion