在Visual Studio Windows Form中连接数据库和获取数据的问题


Problems in connecting to the database and fetching data in Visual Studio Windows Form

我有一个组合框,应该输出主类别(有4行),然后也输出它下的子类别(例如,第一个主类别下的3个子类别,第二个主类别下的5个子类别,等等)。

My First Code正确显示主类别(组合框有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上创建我的预期代码,它工作得很好,但我有麻烦将其应用到Visual Studio中的c#,这是我的代码,如果你们想知道我想要实现什么:

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>";

我的担心:

  1. 我实际上不知道发生了什么,为什么我的第二个代码只做循环一次,更糟糕的是它甚至不显示子类别(maincategory_id='got_category_id'旁边的地方在我的sql语句只是一个占位符,我试着用maincategory_id='1'替换它只是为了检查希望它试图至少检查它是否显示子类别无济于事。我实际上不知道在Visual Studio的sql语句中插入整数的正确语法,但尽管如此,将其设置为'1'的值仍然不显示任何东西)。

  2. 在Visual Studio的sql语句中插入整数的正确语法是什么?我研究了一下,试着把&

这与您构建第二个查询的方式有关。尝试使用String。格式以正确地将您的类别ID嵌入到查询中。

SqlCommand get_subcategory_name = new SqlCommand(String.Format("SELECT * FROM subcategory WHERE maincategory_id='{0}'", got_category_id), sc);