Call
cmd.Parameters.Clear()
before you re-add the parameters. Or add a flag so that you only add them once (there is no need to re-add them each time).
if(!parametersCreated)
{
parametersCreated = true;
}
[Updated code based on our discussion via comments]
private bool parametersCreated;
private void Foo(string _fname, string _lname, string _age)
{
string sql = ". . .";
cmd.CommandText = sql;
cmd.Prepare();
if(!parametersCreated)
{
cmd.Parameters.AddWithValue("@fname", _fname);
. . .
parametersCreated = true;
}
else
{
cmd.Parameters["@fname"].Value = _fname;
. . .
}
cmd.ExecuteNonQuery();
}