在C#上处理项目想要获取在site_id 8上工作的所有worker的emp_id并在表单上显示它。我所做的是
SqlCommand cmd3 = new SqlCommand("Select emp_id from employee_attendance where site_id=8",conn);
SqlDataReader reader = cmd3.ExecuteReader();
while(reader.Read())
{
int emp_id =Convert.ToString(reader[0]));
label7.Text = Convert.ToString(emp_id);
}
它只显示一个结果,但我知道有2名员工符合查询
答案 0 :(得分:4)
您将始终显示最后一个,因为您每次都会覆盖标签。你可以这样做:
StringBuilder builder = new StringBuilder();
while(reader.Read())
{
builder.Append(reader[0]);
builder.Append(" ");
}
label7.Text = builder.ToString();
这将创建一个长字符串,其中所有ID都相互附加(以及尾随空格)。如果您需要删除尾随空格,您也可以修剪结果字符串:
builder.Remove(builder.Length-1, 1);
label7.Text = builder.ToString();
答案 1 :(得分:2)
它只显示一个ID,因为您总是覆盖标签值:
label7.Text = Convert.ToString(emp_id);
你需要连接它:
SqlCommand cmd3 = new SqlCommand("Select emp_id from employee_attendance where site_id=8",conn);
SqlDataReader reader = cmd3.ExecuteReader();
StringBuilder sb = new StringBuilder();
while(reader.Read())
{
int emp_id =Convert.ToString(reader[0]));
sb.Append(Convert.ToString(emp_id) + ", ");
}
label7.Text = sb.ToString();
答案 2 :(得分:2)
这是因为您的下一个结果会覆盖之前的结果。您可以使用类似StringBuilder
类的内容来连接emp_id
var cmd3 = new SqlCommand(
"Select emp_id from employee_attendance where site_id=8",conn);
var reader = cmd3.ExecuteReader();
var sb = new StringBuilder();
while(reader.Read())
{
int emp_id =Convert.ToString(reader[0]));
sb.Append(emp_id + ", ");
}
label7.Text = sb.ToString();
答案 3 :(得分:1)
此代码会覆盖id和label7文本。
while(reader.Read())
{
int emp_id =Convert.ToString(reader[0]));
label7.Text = Convert.ToString(emp_id);
}
要显示两者,请将值附加到其中一个,如下所示。
label7.Text = "";
while(reader.Read())
{
label7.Text += reader[0] += " ";
}
答案 4 :(得分:1)
您正在循环的每次迭代中替换label7.Text中的值,因此它只会显示最后一项。如果符合您的需要,您可以将字符串连接在一起作为循环的一部分,或者找到另一种方式来表示除标签文本之外的其他方式。