1

在 C# 上工作的项目想要获取在 site_id 8 上工作的所有工作人员的 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 名员工与查询匹配

4

5 回答 5

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();
于 2012-06-14T16:20:36.380 回答
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();
于 2012-06-14T16:20:31.560 回答
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();
于 2012-06-14T16:20:38.360 回答
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] += " ";
}
于 2012-06-14T16:21:14.450 回答
1

您将在循环的每次迭代中替换 label7.Text 中的值,因此它只会显示最后一项。如果适合您的需要,您可以将字符串连接在一起作为循环的一部分,或者找到除标签文本之外的其他方式来表示它。

于 2012-06-14T16:21:29.403 回答