如何在ComboBox中使用选定的值来查询SQL查询?

时间:2015-12-23 15:02:54

标签: c# database winforms

当我在ComboBox中选择一个值时。我如何使用它们来查询SQL?

我试过

private void cmb1_SelectedIndexChanged(object sender, EventArgs e)
{
   string select = this.cmb1.GetItemText(this.cmb1.SelectedItem);
   cm1 = new SqlCommand("select VS from DATABASE where ROUND=select", con);
   ap = new SqlDataAdapter(cm1);
   ds = new System.Data.DataSet();
   ap.Fill(ds, "DATABASE");
   cmb2.DataSource = ds.Tables[0]; 
   cmb2.DisplayMember = "VS"; // show in combobox2
}

我想使用变量select进行查询,但它不起作用。

2 个答案:

答案 0 :(得分:2)

您需要将select传递给sql参数

string select = this.cmb1.GetItemText(this.cmb1.SelectedItem);
cm1 = new SqlCommand("select VS from DATABASE where ROUND=@round", con);
cm1.Parameters.Add("@round", SqlDbType.NVarChar, -1);
cm1.Parameters["@round"].Value = select ;

答案 1 :(得分:0)

您只需要在SQL中注入值时要小心。如果你要像这样使用ADO,我建议参数。

cm1 = new SqlCommand("select VS from DATABASE where ROUND=@ROUND", con);
cm1.Parameters.Add("@ROUND", SqlDbType.VarChar);
cm1.Parameters["@ROUND"].Value = select;
  • 注意 - 我看到vantian打败了我的答案,所以我会尝试更多地解释为什么要使用这些参数。

当您使用从Web应用程序(或API或用户可以定义这些值的任何应用程序)发布的包含值时,您不能简单地将其内联到SQL查询中。精明的用户可以将自己的SQL注入其价值,而您的应用程序不会知道差异并运行它。有了这种力量,用户就可以对数据做任何他们想做的事情 - 比如窃取它,或者如果你很幸运,只有删除它才能搞乱你的操作。

参数将自动"清理"通过包装适当的引号及其周围的输入,您将获得更安全的应用程序。

祝你好运!