I have ten textboxes in my winform, and i need to save the text typed in these textboxes into 10 columns of a sql database table. so, for this shall i write :
I think you can use Parameters.AddWithValue() method.
cmd.Parameters.AddWithValue("@j",textbox10.Text);
cmd.Parameters.AddWithValue("@k",textbox11.Text);
cmd.Parameters.AddWithValue("@l",textbox12.Text);
The 2 'solutions' that you suggest in your question, are semantically different. Which one you should use, depends on your table-layout.
The first solution inserts one record in the table, the second insert statement inserts one record (row) for every value (textbox).
Difficult to give a good answer here, since we do not know what you're going to save in that table, and thus , we cannot say how you should save it (how you save it, is inherintly dependent on the way you should call the SQL insert statement).
You could use a function like this:
void AddParams(DBCommand cmd,params object[] parameters)
{
if (parameters != null)
{
int index = 0;
while (index < parameters.Length)
{
cmd.Parameters.AddWithValue("@"+(string)parameters[index], parameters[index + 1]);
index += 2;
}
}
}
Not the best one probably, but functional. Call link this:
AddParams(a,"test1",b,3,c,DateTime.Now);
Or you can use an extension like suggested from @Matt Hamilton to add this function in DBCommand class.
You can use an extension method, like this:
public static class DbCommandExtensions
{
public static void AddInputParameters<T>(this IDbCommand cmd,
T parameters) where T : class
{
foreach (var prop in parameters.GetType().GetProperties())
{
object val = prop.GetValue(parameters, null);
var p = cmd.CreateParameter();
p.ParameterName = prop.Name;
p.Value = val ?? DBNull.Value;
cmd.Parameters.Add(p);
}
}
}
Then call it like this:
cmd.AddInputParameters(new { a = textBox1.Text, b = TextBox2.Text, /* etc */ });
I've used that in a few projects with no problems.