这就是我想要的: 一个类中的方法,它将迭代地返回某列的值。调用方法时,此值将添加到组合框中。这是我的尝试:
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;
}
然而,当调用此方法时,它只将第一行返回到组合框,而不是其他值。
答案 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;
}
祝你好运!