protected void Button1_Click(object sender, EventArgs e)
{
SqlConnection con = new SqlConnection("Data Source=HKGROX-PC\\SQLEXPRESS;Initial Catalog=example;Integrated Security=True");
con.Open();
string value = DropDownList1.SelectedValue.ToString();
switch (value)
{
case "BJP":
string s = "select BJP from noofvotes where year= "+ DropDownList2.Text+" and const=" + DropDownList3.SelectedValue + "";
SqlCommand cmd = new SqlCommand(s,con);
DataSet ds = new DataSet();
SqlDataAdapter sda = new SqlDataAdapter(cmd);
sda.Fill(ds);
if (ds.Tables[0].Rows.Count > 0)
{
DataRow dr = ds.Tables[0].Rows[0];
TextBox1.Text = dr["BJP"].ToString();
}
break;
}
con.Close();
}
这里我收到了无效的列名'Rohini'。我有一个表格,将值提供给列表框。
答案 0 :(得分:3)
假设你有一个名为YEAR的列和我要添加的CONST,以避免混淆错误
string s = "select BJP from noofvotes where [year]= @yval and [const]=@cval";
SqlCommand cmd = new SqlCommand(s,con);
cmd.Parameters.AddWithValue("@yval",DropDownList2.Text);
cmd.Parameters.AddWithValue("@cval",DropDownList3.SelectedValue);
....
将保留字YEAR括在方括号中将允许将该名称用作列标识符(这实际上是一种不好的做法)。 CONST这个词并没有保留,但我发现它因为众所周知的语言关键词而令人困惑。
上面查询中的另一个问题(肯定是第一个错误的来源)是DrowpDownList3的SelectedValue
属性。它插入查询中而不用单引号括起来。如果我想它包含单词Rohini
,那么您的原始文本就会变成这样的
string s = "select BJP from noofvotes where year=2014 and const=Rohini";
并且,通过这种方式,该值被视为列名称
同样,将它作为查询的参数应该可以解决问题。
答案 1 :(得分:1)
试试这个
"select BJP from noofvotes where [year] = "+ DropDownList2.Text+" and const=" + DropDownList3.SelectedValue + "";
以下是Keywords
的保留Sql Server
列表
http://technet.microsoft.com/en-us/library/aa238507%28v=sql.80%29.aspx
答案 2 :(得分:0)
如果你想快速修复,请替换它:
string s = "select BJP from noofvotes where year= "+ DropDownList2.Text+" and const=" + DropDownList3.SelectedValue + "";
有了这个:
string s = "select BJP from noofvotes where [year]= '"+ DropDownList2.Text+"' and const='" + DropDownList3.SelectedValue + "'";
如果您想要更安全的解决方案,请尽可能使用SqlParameter
,这样黑客就会远离您的数据库。
string s = "SELECT BJP FROM noofvotes WHERE [year]= @year AND const=@const";
SqlCommand cmd = new SqlCommand(s, con);
cmd.Parameters.AddWithValue("@year", DropDownList2.Text);
cmd.Parameters.AddWithValue("@const", DropDownList3.SelectedValue);
答案 3 :(得分:-1)
如果你的Columns(year& const)是Varchar2类型,那么使用单引号。
string s = "select BJP from noofvotes where year= '"+ DropDownList2.Text+"' and const='" + DropDownList3.SelectedValue + "'";
SqlCommand cmd = new SqlCommand(s,con);
如果Columns(year& const)是数字列,则必须使用如下所示:
string s = "select BJP from noofvotes where year= "+ Convert.ToInt32(DropDownList2.Text)+" and const=" + Convert.ToInt32(DropDownList3.SelectedValue) + "";
SqlCommand cmd = new SqlCommand(s,con);