我在程序中检索多个复选框值时遇到问题。正如您在下面看到的那样,我正在尝试根据复选框列表中的一组值从我的数据库中检索。
如果我选择一个复选框值,数据库将能够检索该项目,但是如果我选择多于一个复选框值,则不会显示任何内容。有谁可以帮助我吗?我花了很多时间在上面。
我见过其他解决方案,但它似乎没有帮助我。谢谢。
protected void chkBoxCategories_SelectedIndexChanged(object sender, EventArgs e)
{
// Create the list to store.
List<String> YrStrList = new List<string>();
// Loop through each item.
foreach (ListItem item in chkBoxCategories.Items)
{
if (item.Selected)
{
// If the item is selected, add the value to the list.
YrStrList.Add(item.Value);
}
else
{
// Item is not selected, do something else.
}
}
// Join the string together using the ; delimiter.
Session["UPCategories"] = String.Join(", ", YrStrList.ToArray());
}
以下代码位于另一页:
SqlDataSource1.SelectCommand = "SELECT sf.*, sfc.* FROM SkillsFuture sf INNER JOIN SkillsFutureCategory sfc ON sfc.SFCatID = sf.fkSFCatID WHERE sfc.SFCatName IN (@catnames) AND sf.SFPrice BETWEEN @min AND @max AND sf.SFCertStatus='Verified'";
SqlDataSource1.SelectParameters.Add("catnames", Session["UPCategories"].ToString());
SqlDataSource1.SelectParameters.Add("min", Convert.ToDecimal(Session["UPBudgetMin"]).ToString());
SqlDataSource1.SelectParameters.Add("max", Convert.ToDecimal(Session["UPBudgetMax"]).ToString());
SqlDataSource1.DataBind();
答案 0 :(得分:-1)
你应该在@catnames中寻找的是'catname1','catname2'等。你正在使用,作为分隔符,但我没有看到你添加'',所以我希望在@ catnames变量你得到catname1,catname2等..这是行不通的。尝试:
YrStrList.Add("'"+item.Value+"'");
答案 1 :(得分:-1)
在动态填充IN(...)子语句列表时,我也遇到了类似的麻烦。至少在PostgreSQL中,我不得不用WHERE子语句中的ANY分支替换IN(...),并将所需值的数组传递给语句,如下所示:
SELECT sf.*, sfc.* FROM SkillsFuture sf INNER JOIN SkillsFutureCategory
sfc ON sfc.SFCatID = sf.fkSFCatID WHERE sfc.SFCatName = ANY (@catnames) AND
sf.SFPrice BETWEEN @min AND @max AND sf.SFCertStatus='Verified'
@catnames将是sfc.SFCatName数据类型的数组。