Ado.Net Error Procedure or function 'usp_ProjectsCreateNew' expects parameter '@ProjectId', which was not supplied
===

i have parameters like this;

        comm.CommandText = "usp_ProjectsCreateNew";

        SqlParameter param = comm.CreateParameter();
        param.ParameterName = "@ProjectId";
        param.Direction = ParameterDirection.Output;
        param.DbType = DbType.Int32;
        comm.Parameters.Add(param);

        param = comm.CreateParameter();
        param.ParameterName = "@ProjectHeading";
        param.Value = heading;
        comm.Parameters.Add(param);

        param = comm.CreateParameter();
        param.ParameterName = "@ProjectLongDescription";
        param.Value = longSummary;
        comm.Parameters.Add(param);

        param = comm.CreateParameter();
        param.ParameterName = "@ProjectUrl";
        param.Value = url;
        comm.Parameters.Add(param);

        param = comm.CreateParameter();
        param.ParameterName = "@PromoFront";
        param.Value = promoFront;
        comm.Parameters.Add(param);

        param = comm.CreateParameter();
        param.ParameterName = "@ProjectThumbnail";
        param.Value = thumbnailFileName;
        comm.Parameters.Add(param);

        param = comm.CreateParameter();
        param.ParameterName = "@ProjectImage2";
        param.Value = imageFileName1;
        comm.Parameters.Add(param);

        param = comm.CreateParameter();
        param.ParameterName = "@ProjectImage3";
        param.Value = imageFileName2;
        comm.Parameters.Add(param);

        param = comm.CreateParameter();
        param.ParameterName = "@ProjectImage4";
        param.Value = imageFileName3;
        comm.Parameters.Add(param);

        param = comm.CreateParameter();
        param.ParameterName = "@ProjectImage5";
        param.Value = imageFileName4;
        comm.Parameters.Add(param);

        comm.Transaction = tran;
        int result = comm.ExecuteNonQuery();

My stored procedure code is like this;

    CREATE PROC [dbo].[usp_ProjectsCreateNew]
    (
    	@ProjectId INT output,
    	@ProjectHeading varchar(100),
    	@ProjectLongDescription varchar(max),
    	@ProjectUrl varchar(100),
    	@PromoFront bit,
    	@ProjectThumbnail varchar(50),
    	@ProjectImage2 varchar(50),
    	@ProjectImage3 varchar(50),
    	@ProjectImage4 varchar(50),
    	@ProjectImage5 varchar(50)
    )
    AS
    BEGIN TRY
    	BEGIN TRAN
    		INSERT INTO [Projects]([ProjectHeading], [ProjectLongSummary], [ProjectUrl],
    			[PromoFront], [ProjectThumbnail], [ProjectImage2], [ProjectImage3], [ProjectImage4], [ProjectImage5])
    		VALUES(@ProjectHeading, @ProjectLongDescription, @ProjectUrl, 
    			@PromoFront, @ProjectThumbnail, @ProjectImage2, @ProjectImage3, @ProjectImage4, @ProjectImage5);
    			
    		SELECT @ProjectId = @@IDENTITY;
    	COMMIT TRAN
    END Try
    BEGIN CATCH
    	PRINT Error_Message();
    	ROLLBACK TRAN
    END CATCH

But I am getting this error;

    Message: Procedure or function 'usp_ProjectsCreateNew' expects parameter '@ProjectId', which was not supplied.
    
     Source: .Net SqlClient Data Provider
    
     Method: Void OnError(System.Data.SqlClient.SqlException, Boolean, System.Action`1[System.Action])
    
     Stack Trace:
    
       at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)
       at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)
       at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose)
       at System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady)
       at System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString)
       at System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async, Int32 timeout, Task& task, Boolean asyncWrite)
       at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, TaskCompletionSource`1 completion, Int32 timeout, Task& task, Boolean asyncWrite)
       at System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(TaskCompletionSource`1 completion, String methodName, Boolean sendToPipe, Int32 timeout, Boolean asyncWrite)
       at System.Data.SqlClient.SqlCommand.ExecuteNonQuery()
       at admin_projects.buttonCreate_Click(Object sender, EventArgs e) in e:\myWork\Teletech\TelicTech\admin\projects.aspx.cs:line 166