2017-01-01 4 views
2

У меня возникла проблема с извлечением нескольких флажков в моей программе. Итак, как вы можете видеть ниже, я пытаюсь получить из моей базы данных на основе набора значений из checkboxlist.Извлечь несколько значений из CheckboxList с помощью SQL WHERE IN

Если я выберу значение ONE, база данных сможет извлечь элемент, однако, если я выберу значение «БОЛЬШЕ, ЧЕМ ONE», ничего не появится. Может кто-то мне помочь, пожалуйста? Я потратил на это довольно много времени.

Я видел другие решения, но, похоже, это не помогло мне. Спасибо.

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

Строка, содержащая ''x, y, z'', не совпадает с символом' x, y, z'. Первое - это одно значение. Второй - три значения. –

ответ

-1

Что вы должны искать в @catnames является «catname1», «catname2» и т.д. Вы используете, в качестве разделителя , но я не вижу, что вы добавляете '', поэтому я ожидаю, что в переменных @catnames вы получите catname1, catname2 и т. д., которые не будут работать. Попробуйте:

YrStrList.Add("'"+item.Value+"'"); 
+0

Привет, спасибо за комментирование. Но ничего не было видно. – Elijah

-1

Я также столкнулся с подобными проблемами при динамическом заполнении списка IN (...). По крайней мере, в PostgreSQL я должен был заменить IN (...) с любой ветви в WHERE подоператора и передавая массив желаемых значений в заявлении, например:

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.

Смежные вопросы