如何使用while循环返回多个字符串值

时间:2013-11-29 22:53:45

标签: c# loops iterator return

这就是我想要的: 一个类中的方法,它将迭代地返回某列的值。调用方法时,此值将添加到组合框中。这是我的尝试:

  public string FillCombo()
      {
            string connstring = "Data Source=HP\\SQLEXPRESS;Initial Catalog=Arana;Integrated Security=True";
            string query = "Select * from categorias";
            SqlConnection conn = new SqlConnection(connstring);
            SqlCommand command = new SqlCommand(query, conn);
            SqlDataReader read;
                conn.Open();
                read = command.ExecuteReader();
                while (read.Read())
                {
                    string combodata = read.GetString(1);
                    return (combodata); 
                }
               return null;
        }

然而,当调用此方法时,它只将第一行返回到组合框,而不是其他值。

2 个答案:

答案 0 :(得分:1)

它被称为yield

http://msdn.microsoft.com/en-us/library/vstudio/9k7k7cf0.aspx

来自手册

public static System.Collections.IEnumerable Power(int number, int exponent)
{
    int result = 1;

    for (int i = 0; i < exponent; i++)
    {
        result = result * number;
        yield return result;
    }
}

yield会在循环完成后从循环中发送一组返回结果。

您可以使用循环周围的try / finally块关闭数据连接。

  public IEnumerable FillCombo()
  {

        SqlConnection conn = new SqlConnection(connstring);
        SqlCommand command = new SqlCommand(query, conn);
        SqlDataReader read;
        conn.Open();
        read = command.ExecuteReader();
        try
        {
            while (read.Read())
            {
                yield return read.GetString(1);
            }
        }
        finally
        {
            read.close();
            conn.close();
        }
    }

C#的一个很酷但经常被忽视的功能

答案 1 :(得分:0)

考虑使用List of string作为输出。对您的代码进行以下微小更改应该有帮助......

public List<string> FillCombo()
{
    List<string> comboList = new List<string>();
    string connstring = "Data Source=HP\\SQLEXPRESS;Initial Catalog=Arana;Integrated Security=True";
    string query = "Select * from categorias";
    SqlConnection conn = new SqlConnection(connstring);
    SqlCommand command = new SqlCommand(query, conn);
    SqlDataReader read;
    conn.Open();
    read = command.ExecuteReader();
    while (read.Read())
    {
        string combodata = read.GetString(1);
        comboList.Add(combodata);
    }
    return comboList;
}

祝你好运!