//save player profile cmd.CommandText = "proc_insert_update_PAR_Profiles"; cmd.CommandType = CommandType.StoredProcedure; cmd.Connection = conn; cmd.Parameters.Add(new SqlParameter("@Id", "0")); cmd.Parameters.Add(new SqlParameter("@UserId", dt.Rows[0]["UserId"])); cmd.Parameters.Add(new SqlParameter("@AccessId", dt.Rows[0]["AccessId"])); cmd.Parameters.Add(new SqlParameter("@MembershipId", dt.Rows[0]["MembershipId"])); cmd.Parameters.Add(new SqlParameter("@NextPayDate", dt.Rows[0]["NextPayDate"])); cmd.Parameters["@Id"].Direction = ParameterDirection.Output; //this line causes error dt.Rows[0]["AccessId"].ToString() + " " + dt.Rows[0]["MembershipId"].ToString() + " " + dt.Rows[0]["NextPayDate"].ToString()); cmd.ExecuteNonQuery(); if (!cmd.Parameters["@Id"].Value.Equals(DBNull.Value)) playerID = Convert.ToString(cmd.Parameters["@Id"].Value.ToString()); ALTER PROCEDURE [atomic].[proc_insert_update_PAR_Profiles] ( @Id int output, @UserId varchar(32), @AccessId int, @MembershipId int, @NextPayDate datetime ) AS Begin UPDATE PAR_Profiles SET UserId = @UserId, AccessId = @AccessId, MembershipId = @MembershipId, NextPayDate = @NextPayDate WHERE Id = @Id if(@@ROWCOUNT<=0) BEGIN INSERT INTO PAR_Profiles (UserId,AccessId,MembershipId,NextPayDate) VALUES (@UserId,@AccessId,@MembershipId,@NextPayDate) END SET @Id = SCOPE_IDENTITY() End