将数据库中的值存储到C#变量中

时间:2012-06-14 16:17:51

标签: c#

在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名员工符合查询

5 个答案:

答案 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中的值,因此它只会显示最后一项。如果符合您的需要,您可以将字符串连接在一起作为循环的一部分,或者找到另一种方式来表示除标签文本之外的其他方式。