这是我尝试从会话中获取多个值时的ASPX代码段。我收到一个错误:“逗号附近的语法不正确”(标记在代码段中的行):
SqlCommand cmd1 = new SqlCommand("select plugin_id from profiles_plugins where profile_id=" + Convert.ToInt32(Session["cod"]), con);
SqlDataReader dr1 = cmd1.ExecuteReader();
var yourlist =new List<Int32>();
if (dr1.HasRows)
{
while (dr1.Read())
{
yourlist.Add(Convert.ToInt32(dr1[0]));
}
}
//String str1 = String.Join(", ", yourlist.Select(o => o.ToString()).ToArray());
dr1.Close();
cmd1.Dispose();
Array k= yourlist.ToArray();
Int32 a =Convert.ToInt32( k.GetValue(0));
Int32 b =Convert.ToInt32( k.GetValue(1));
Int32 c =Convert.ToInt32( k.GetValue(2));
Int32 d =Convert.ToInt32( k.GetValue(3));
SqlCommand cmd2 = new SqlCommand("select id,name from plugins where id =(" + a + " or " + b + " or " + c + " or " + d + ")" , con); /// Error here?
SqlDataReader dr2 = cmd2.ExecuteReader(); ///Error here?
if (dr2.HasRows)
{
while (dr2.Read())
{
ListBox2.DataSource = dr2;
ListBox2.DataBind();
}
}
dr2.Close();
cmd2.Dispose();
con.Close();
我错过了什么?
答案 0 :(得分:7)
SQL查询错误。将其更改为:
SqlCommand cmd2 = new SqlCommand("select id,name from plugins
where id in(" + a + " , " + b + " , " + c + " , " + d + ")" , con);
答案 1 :(得分:2)
此行有误。试试这个
SqlCommand cmd2 = new SqlCommand("select id,name from plugins where id =" + a + "or id =" + b + " or id =" + c + " or id =" + d + "" , con)
答案 2 :(得分:1)
在你的情况下,而不是多个条件或我建议在你的SQL查询中使用IN子句,而不是。.. + "" + ...
我会使用String.Format
SqlCommand cmd2 = new SqlCommand(String.Format("select id,name from plugins where id IN ({0}, {1}, {2}, {3}", a, b, c, d,) con);
此外,如果您将来遇到相同或类似的错误,您可以直接在SQL Server上检查您的查询。只需打开New Query窗口并在那里复制SQL查询然后运行它。在这种情况下,它将是:
select id,name from plugins where id IN (1, 2, 3, 4)