繁体   English   中英

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

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

我有一个组合框,应该输出主类别(具有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上创建预期的代码,并且效果很好,但是在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. 我实际上不知道为什么我的第二条代码只执行一次循环,这是怎么回事,更糟糕的是它甚至不显示子类别(sql语句中WHERE旁边的maincategory_id='got_category_id'只是一个占位符我试图用maincategory_id='1'替换它,只是为了希望它至少检查它是否显示了子类别,但实际上我不知道在sql语句中插入整数的正确语法但在Visual Studio中,将其设置为'1'仍然不会显示任何内容)。

  2. 在Visual Studio中的sql语句内插入整数的正确语法是什么? 我研究并尝试将&放在变量的开头和结尾,但是它不起作用。

它与构建第二个查询的方式有关。 尝试使用String.Format将类别ID正确嵌入查询中。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM