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

I have a combo box that's supposed to output the main category (has 4 rows) then also output the sub category under it (ex. 3 sub categories under the first main category, 5 sub categories under the second main category and so on).

My First Code displays the main category correctly (the combobox has 4 results)

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();
}

But I tried inserting another loop for the sub category under the while loop of the main category but all I'm getting on the combo box is the first row of the main category (the combobox only has 1 result which is the first row from the main category table)

The code I used was:

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();
}

The only programming experience I have is on php so I tried creating my intended code on PHP and it worked perfectly but I'm having troubles applying it to C# in Visual Studio, here's my code if you guys are wondering what I'm trying to achieve:

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

My Concerns:

  1. I don't actually know what's happening on why my second code is only doing the loop once and what's worse is it doesn't even display the sub category (the maincategory_id='got_category_id' beside the WHERE in my sql statement was only a placeholder and I tried replacing it by maincategory_id='1' just to check in hopes of it trying to at least check if it's displaying the sub category to no avail. I actually don't know the proper syntax to insert an integer inside a sql statement in Visual Studio but nevertheless, setting it to a value of '1' still doesn't display anything).

  2. What is the proper syntax on inserting an integer inside a sql statement in Visual Studio? I researched and tried putting the & at the beginning and end of the variable but it isn't working.

1个回答



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

  SqlCommand get_subcategory_name = new SqlCommand(String.Format(“SELECT * FROM subcategory WHERE maincategory_id ='{0  }'“,got_category_id),sc); 
</ code> </ pre>
</ div>

展开原文

原文

It has to do with the way you are building your second query. Try using String.Format to proper embed you category ID into the query.

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

drj26159
drj26159 我也是,非常感谢你抽出时间回答我的问题。 实际上,我不仅在我的具体问题上学到了很多东西,而且还学到了调试实践的知识。 下次遇到我无法解释的问题时,我肯定会记住这些。
接近 5 年之前 回复
dongmaonao0505
dongmaonao0505 这绝对是一个有效的解决方案。 很好找。 很高兴我们能够通过这个谈论。
接近 5 年之前 回复
douxue4242
douxue4242 哦,废话,我终于做到了。 我在连接字符串上添加了此代码MultipleActiveResultSets = True。 这是正确的解决方案吗? 就是想。
接近 5 年之前 回复
dragonmeng2002
dragonmeng2002 好,所以你一次只能打开一个SqlDataReader。 我会做什么来解开循环。 在一个循环中读取所有主要类别。 然后使用子类别查询循环遍历这些类别。 我会更新我的解决方案以反映这一点。
接近 5 年之前 回复
douwei8096
douwei8096 谢谢,我创建了一个富文本框并将其.text值设置为catched异常并显示大量错误,它看起来像这样:s17.postimg.org/xlvc0ar0v/try.png我不想评论错误 这里可能很难阅读,所以我上传了当前表格的图片。
接近 5 年之前 回复
ds0678
ds0678 如果它没有子类别循环,那么你可能会有一个被抑制的异常。 在代码周围放置一个try-catch块(msdn.microsoft.com/en-us/library/0yd65esw.aspx)并查看是否引发了任何异常。 这可以帮助进一步排除故障。
接近 5 年之前 回复
dongyuan6949
dongyuan6949 我创建了两个名为number_of_maincategory_loops和number_of_subcategory_loops的int变量,并使maincategory int变量在主类的while循环的第一行递增,并使子类变量在子类的while循环的第一行递增,并且 结果它游戏我在哪里:主类别增加一次,因为它显示值1和子类别没有增加,因为它显示值0。
接近 5 年之前 回复
dongshui2254
dongshui2254 在while循环上放置一个断点,以确保它正确迭代(msdn.microsoft.com/en-us/library/5557y8b4.aspx)。 您还可以在某些变量上添加监视以检查其值(msdn.microsoft.com/en-us/library/0taedcee.aspx)。
接近 5 年之前 回复
duanchique1196
duanchique1196 我很抱歉,如果我是一个菜鸟,但我怎么能看到我的查询从调试器得到的数据? 现在,我从调试器中看到的是一堆正在加载的项目。
接近 5 年之前 回复
doujindou4356
doujindou4356 您不必刷新查询之间的连接。 我建议使用调试器逐步执行代码,以确保您的查询正在接收您的期望。
接近 5 年之前 回复
duanshan2988
duanshan2988 这些信息可能有用,虽然我不确定它是否使用了正确的协议,但我尝试添加一个cn.Close(); 和cn.Open(); 在int下面got_category_id = Convert.ToInt32(dr2 [“maincategory_id”]); 它现在做了什么我可以看到主要类别的子类别但我仍然只看到一个主要类别,当应该有四个主要类别,所以循环似乎只运行一次或它可能按预期运行但 cn连接可能存在问题,导致下一个循环的查询失败。
接近 5 年之前 回复
douyingmou1389
douyingmou1389 谢谢,这为SQL的语法问题做了工作,虽然我的主要问题是我的组合框只显示主类别表中的一行仍然是遗憾的,尚未解决。
接近 5 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐