У меня есть поле со списком, которое должно выводить основную категорию (имеет 4 строки), а также выводить подкатегорию под ней (например, 3 подкатегории в первой основной категории, 5 подкатегорий в второй основной категории и т. Д.).
Мой первый код правильно отображает основную категорию (в выпадающем списке 4 результата)
private void Form1_Load(object sender, EventArgs e)
{
sc.Open();
//For Main Category
SqlCommand get_maincategory_name = new SqlCommand("SELECT * FROM maincategory", sc);
SqlDataReader dr2 = get_maincategory_name.ExecuteReader();
while (dr2.Read())
{
comboBox1.Items.Add(dr2["maincategory_name"].ToString());
}
sc.Close();
}
Но я попытался вставить еще один цикл для подкатегории в цикл while основной категории, но все, что я получаю в поле со списком, — это первая строка основной категории (у комбинированного списка есть только 1 результат, который является первой строкой из таблица основной категории)
Код, который я использовал, был:
private void Form1_Load(object sender, EventArgs e)
{
sc.Open();
//For Main Category
SqlCommand get_maincategory_name = new SqlCommand("SELECT * FROM maincategory", sc);
SqlDataReader dr2 = get_maincategory_name.ExecuteReader();
while (dr2.Read())
{
comboBox1.Items.Add(dr2["maincategory_name"].ToString());
//For Sub Category
int got_category_id = Convert.ToInt32(dr2["maincategory_id"]);
SqlCommand get_subcategory_name = new SqlCommand("SELECT * FROM subcategory WHERE maincategory_id='got_category_id'", sc);
SqlDataReader dr3 = get_subcategory_name.ExecuteReader();
while (dr3.Read())
{
comboBox1.Items.Add(dr3["subcategory_name"].ToString());
}
}
sc.Close();
}
Единственный опыт программирования у меня есть на php, поэтому я попытался создать намеченный код на PHP, и он работал отлично, но у меня возникают проблемы с применением его на C # в Visual Studio, вот мой код, если вам, ребята, интересно, что я пытаюсь достижения:
echo "<select>";
// FOR MAIN CATEGORY
$maincategory_query = mysqli_query($con,"SELECT * FROM maincategory") or mysqli_error();
while($got = mysqli_fetch_assoc($maincategory_query))
{
$maincategory_id = $got['maincategory_id'];
$maincategory_name = $got['maincategory_name'];
echo "<option disabled>$maincategory_name</option>";
// FOR SUB CATEGORY
$subcategory_query = mysqli_query($con,"SELECT * FROM subcategory WHERE maincategory_id='$maincategory_id'") or mysqli_error();
while($got = mysqli_fetch_assoc($subcategory_query))
{
$subcategory_id = $got['subcategory_id'];
$subcategory_name = $got['subcategory_name'];
echo "<option disabled>--$subcategory_name</option>";
// FOR ITEM
$item_query = mysqli_query($con,"SELECT * FROM item WHERE subcategory_id='$subcategory_id'") or mysqli_error();
while($got = mysqli_fetch_assoc($item_query))
{
$item_id = $got['item_id'];
$item_name = $got['item_name'];
echo "<option>----$item_name</option>";
}
}
}
echo "</select>";
Мои проблемы:
Я на самом деле не знаю, что происходит, почему мой второй код делает цикл только один раз, и что еще хуже, он даже не отображает подкатегорию ( maincategory_id='got_category_id'
Помимо WHERE в моем SQL-заявлении был только заполнитель, и я попытался заменить его на maincategory_id='1'
просто чтобы проверить, надеется ли он, по крайней мере, проверить, отображает ли он подкатегорию, но безрезультатно. Я на самом деле не знаю правильный синтаксис для вставки целого числа внутри оператора SQL в Visual Studio, но, тем не менее, установка его в значение «1» по-прежнему ничего не отображает).
Каков правильный синтаксис при вставке целого числа внутри оператора SQL в Visual Studio? Я исследовал и попытался положить & в начале и в конце переменной, но она не работает.
Это связано с тем, как вы строите свой второй запрос. Попробуйте использовать String.Format для правильного встраивания идентификатора вашей категории в запрос.
SqlCommand get_subcategory_name = new SqlCommand(String.Format("SELECT * FROM subcategory WHERE maincategory_id='{0}'", got_category_id), sc);
Других решений пока нет …