I'm writing some code that attempts to loop through a list of recipient ids, but with the same message id and owner id for each recipient id and at each iteration, execute a `stored procedure`. In testing, I keep getting the 
aforementioned error.

> 
> Column name or number of supplied values does not match table
>  definition
> 
> 
> 

Now I've tested the data extensively at the database level, the stored procedure is working just fine, so I'm reasonably sure its here in the `C#` code. I've made sure the parameter names are exact, and that they are the same corresponding types, etc. I've tested with the same sample data. My object model looks like this:

```
public class ShareModel
{
    public string MessageId { get; set; }
    public int OwnerId { get; set; }
    public List<int> RecipientIds { get; set; }
}

```

And my method:

```
public void ShareMessage(ShareBindingModel shares)
    {
        try
        {
            var msgId = shares.MessageId;
            var ownerId = shares.OwnerId;
            using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["conn"].ConnectionString))
            {
                conn.Open();
                foreach (var i in shares.RecipientIds)
                {
                    using (SqlCommand command = new SqlCommand("ForwardMessage", conn))
                    {
                        command.CommandType = CommandType.StoredProcedure;
                        command.Parameters.AddWithValue("@new_recipient_id", i);
                        command.Parameters.AddWithValue("@src_msgid", msgId);
                        command.Parameters.AddWithValue("@fwdperson_id", ownerId);

                        command.ExecuteNonQuery();
                    }
                }
            }
        }
        catch(Exception ex)
        {
            throw new Exception(ex.Message);
        }
    }

```

Stored procedure (I did not write this):

```
ALTER PROCEDURE [dbo].[ForwardMessage]
 @new_recipient_id int,
 @src_msgid varchar(30),
 @fwdperson_id int
AS
BEGIN
declare @new_msgid varchar(30)
declare @tenant_id int
declare @sender_id int
declare @action_dt datetime

select @tenant_id=tenant_id, 
       @sender_id=sender_id,
       @action_dt=getdate() 
  from message 
 where msg_id=@src_msgid

exec dbo.GenerateString 1,1,1,null,30,@new_msgid OUT
insert into message
SELECT  @new_msgid
  ,[tenant_id]
  ,[sender_id]
  ,@new_recipient_id
  ,(select email_addr from person_email where person_id=@new_recipient_id )
  ,[description]
  ,[date_recorded]
  ,[filename]
  ,[size_bytes]
  ,[size_time]
  ,[filepath]
  ,[Flag]
  ,[title]
  ,[date_activity]

  FROM [message]
  where tenant_id=@tenant_id
and msg_id=@src_msgid

END

```

If anyone could point out what I'm doing wrong I would appreciate it.