在 Visual Studio Windows 表格中连接数据库和获取数据的问题
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 循环下为子类别插入另一个循环,但我在组合框上得到的只是主类别的第一行(组合框只有一个结果是主类别的第一行 table)
我使用的代码是:
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>";
我的担忧:
我实际上不知道为什么我的第二个代码只执行一次循环,更糟糕的是它甚至不显示子类别(旁边的 maincategory_id='got_category_id'
我的 sql 语句中的 WHERE 只是一个占位符,我尝试用 maincategory_id='1'
替换它只是为了检查它是否试图至少检查它是否显示子类别无济于事。我实际上没有我不知道在 Visual Studio 中的 sql 语句中插入整数的正确语法,但是尽管如此,将其设置为值“1”仍然不会显示任何内容)。
在 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);
我有一个组合框,它应该输出主类别(有 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 循环下为子类别插入另一个循环,但我在组合框上得到的只是主类别的第一行(组合框只有一个结果是主类别的第一行 table)
我使用的代码是:
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>";
我的担忧:
我实际上不知道为什么我的第二个代码只执行一次循环,更糟糕的是它甚至不显示子类别(旁边的
maincategory_id='got_category_id'
我的 sql 语句中的 WHERE 只是一个占位符,我尝试用maincategory_id='1'
替换它只是为了检查它是否试图至少检查它是否显示子类别无济于事。我实际上没有我不知道在 Visual Studio 中的 sql 语句中插入整数的正确语法,但是尽管如此,将其设置为值“1”仍然不会显示任何内容)。在 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);