روشی که من پیدا کردم:
	فرض کنید یه storeProcedure  در sql داریم:
Create Procedure InsertProperties
    @zoneID int,
	@ptID int,
	@POwnerName nvarchar(100) = NULL,
As
Begin
Insert Into Properties
([zoneID],[ptID],[POwnerName])
Values
		(@zoneID,@ptID,@POwnerName)
Declare @ReferenceID int
SET @ReferenceID = @@IDENTITY
Return @ReferenceID
END
	در قسمت c#:
...
.........
 cmd.Parameters.Add("@zoneID", SqlDbType.Int).Value = agricultures.ZoneID;
            cmd.Parameters.Add("@ptID", SqlDbType.Int).Value = agricultures.propertyTypeID;
            cmd.Parameters.Add("@POwnerName", SqlDbType.NVarChar, 100).Value = agricultures.OwnerName.Trim();
 cmd.Parameters.Add(new SqlParameter("ReturnValue",
                SqlDbType.Int,
                4, /* Size */
                ParameterDirection.ReturnValue,
                false, /* is nullable */
                0, /* byte precision */
                0, /* byte scale */
                string.Empty,
                DataRowVersion.Default,
                null));
 cnn.Open();
                int result;
                this.ExecuteNonQuery(cmd);
                result = (int)cmd.Parameters["ReturnValue"].Value;
                return (result);