我的winform中有十个文本框,我需要将在这些文本框中键入的文本保存到sql数据库表的10列中。所以,为此我应该写:
INSERT INTO item (c1,c2,c3...,c10) values (@a,@b....@j) cmd.Parameters.Add("@a",SqlDbType.Varchar) cmd.Parameteres["@a"].Value=textbox1.Text; cmd.Parameters.Add("@b",SqlDbType.Varchar) cmd.Parameteres["@b"].Value=textbox2.Text;. . . . . cmd.Parameters.Add("@j",SqlDbType.Varchar) cmd.Parameteres["@j"].Value=textbox10.Text;
或 每个文本框十个单独的查询:
INSERT INTO item (c1) values (@a) cmd.Parameters.Add("@a",SqlDbType.Varchar) cmd.Parameteres["@a"].Value=textbox1.Text; INSERT INTO item (c2) values (@b) cmd.Parameters.Add("@b",SqlDbType.Varchar) cmd.Parameteres["@b"].Value=textbox2.Text;. . . INSERT INTO item (c10) values (@j) cmd.Parameters.Add("@j",SqlDbType.Varchar) cmd.Parameteres["@j"].Value=textbox10.Text;
或者,请提出一个有效的代码。
如何在单个语句中向cmd添加多个参数?是否有可能?
您可以使用扩展方法,如下所示:
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); } } }
然后这样称呼它:
cmd.AddInputParameters(new { a = textBox1.Text, b = TextBox2.Text, /* etc */ });
我已经在几个项目中使用了它,没有任何问题。