使用SqlCommand,如何向其对象添加多个参数,通过sql表中的winform插入

我的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(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 */ }); 

我已经在一些没有问题的项目中使用过它。

我认为你可以使用Parameters.AddWithValue()方法。

 cmd.Parameters.AddWithValue("@j",textbox10.Text); cmd.Parameters.AddWithValue("@k",textbox11.Text); cmd.Parameters.AddWithValue("@l",textbox12.Text); 

你在问题中提出的2’解决方案’在语义上是不同的。 你应该使用哪一个,取决于你的表格布局。

第一个解决方案在表中插入一条记录,第二个插入语句为每个值(文本框)插入一条记录(行)。

很难在这里给出一个好的答案,因为我们不知道你要在那个表中保存什么,因此,我们不能说你应该如何保存它(你如何保存它,依赖于你应该调用的方式) SQL插入语句)。

你可以使用这样的函数:

 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; } } } 

可能不是最好的,但function性。 呼叫链接:

 AddParams(a,"test1",b,3,c,DateTime.Now); 

或者您可以使用@Matt Hamilton建议的扩展名在DBCommand类中添加此function。