当我在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
进行查询,但它不起作用。
答案 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;
当您使用从Web应用程序(或API或用户可以定义这些值的任何应用程序)发布的包含值时,您不能简单地将其内联到SQL查询中。精明的用户可以将自己的SQL注入其价值,而您的应用程序不会知道差异并运行它。有了这种力量,用户就可以对数据做任何他们想做的事情 - 比如窃取它,或者如果你很幸运,只有删除它才能搞乱你的操作。
参数将自动"清理"通过包装适当的引号及其周围的输入,您将获得更安全的应用程序。
祝你好运!