C#使用查询中的多行填充标签

C# Populate label with multiple rows from query

我有几行要添加到 winform 的标签中。我的问题是它只显示一行。应该如何修改代码以便显示所有行?我只需要它用于第一部分 'reader.HasRows',对于 'else' 部分它总是一行。该程序检查使用的是外部 ID 还是内部 ID。

我的代码是:

private void btnCstID_Click(object sender, EventArgs e)
{
      string groupId = textCstID.Text.Trim();
      string queryStringInt = ("SELECT [Data_Group],[Internal_Customer_ID] FROM [CS_RT_CUSTOMER_DETAILS] WHERE [Customer_ID] ='" + groupId + "' and [Active] = 'Y'");
      string queryStringExt = ("SELECT left([IP_ID],10) FROM [CS_RT_CUSTOMER_DETAILS] WHERE left([IP_ID],10) ='" + groupId + "' and [Active] = 'Y'");
      string connString = @"..";

      using (SqlConnection connection = new SqlConnection(connString))
      {
            using (SqlCommand sqlCommand1 = new SqlCommand(queryStringInt, connection))
            {
                  connection.Open();
                  SqlDataReader reader = sqlCommand1.ExecuteReader();

                  if (reader.HasRows)
                  {
                      while (reader.Read())
                      {
                          description2.Text = String.Format("Customer ID to use: {0} - {1}", reader.GetString(0), reader.GetString(1));

                       }
                   }
                   else
                   {
                       using (SqlCommand sqlCommand2 = new SqlCommand(queryStringExt, connection))
                       {
                            reader.Close();
                            object reader2 = sqlCommand2.ExecuteScalar();
                            {
                                description2.Text = String.Format("Customer ID to use: {0}", reader2);
                            }
                        }
                   }
             }
      }

}

您可以使用 List<> 存储返回的行,然后 concatenate/output 根据需要存储它们。 或者因为这只是一个要连接的简单字符串,所以您可以像这样使用 StringBuilder;

....
StringBuilder sb = new StringBuilder();
while (reader.Read())
{
    sb.Append(String.Format("Customer ID to use: {0} - {1};", reader.GetString(0), reader.GetString(1)));
}
description2.Text = sb.ToString();
....