Why not use a dictionary in your last signature:
public void Execute(string query, Action<Dictionary<string, object>> parameterizer)
Execute(query, p =>
{
p["user_id"] = 1;
p["mf"] = "6CE71037";
});
Then, the Execute
method can use the Action
to populate a Dictionary
and create the parameters based on it:
var parameters = new Dictionary<string, object>();
parametrizer(parameters);
foreach (var pair in parameters)
{
var parameter = f.CreateParameter();
parameter.ParameterName = pair.Key;
parameter.Value = pair.Value;
cmd.Parameters.Add(parameter);
}
Another solution if you want to pass the actual IDbCommand
would be to use an extension method:
public static void AddWithValue<T>(this IDbCommand command, string name, T value)
{
var parameter = command.CreateParameter();
parameter.ParameterName = name;
parameter.Value = value;
command.Parameters.Add(parameter);
}
Calling this would look like:
Execute(query, cmd =>
{
cmd.AddWithValue("user_id", 1);
cmd.AddWithValue("mf", "6CE71037");
});