我在.Net framework 4.0中有一个WPF表单。我要做的是用一个查询结果填充一个组合框。我可以做到这一点,但为了防止重复代码,我试图有一个类,我可以使用/调用我想填充的每个组合框(多个组合框将共享来自同一查询的结果)。
我构建了我的课程如下:
internal class DatabaseHandle
{
private string _connectionString =
"Data Source=FINALLYWINDOWS7\\TESTING;Initial Catalog=Testing;Integrated Security=true";
public string PopulateTeamMembers()
{
string queryString = "select setting_main"
+ " from [marlin].[support_config]"
+ " where config_code = 30"
+ " and setting_active = 1"
+ " order by setting_main";
using (var connection = new SqlConnection(_connectionString))
{
var command = new SqlCommand(queryString, connection);
try
{
connection.Open();
SqlDataReader reader = command.ExecuteReader();
while (reader.Read())
{
return reader[0].ToString();
}
reader.Close();
}
catch (Exception ex)
{
return "Error, unable to load";
}
}
return null;
}
}
然后在另一个班级我有以下方法:
private void LoadInterface()
{
DatabaseHandle testing = new DatabaseHandle();
string teammembers = testing.PopulateTeamMembers();
comboBoxResolvedBy.Items.Add(teammembers);
}
这会填充我的组合框,只是它只使用查询中的第一个值填充它。我已经检查了数据,一切都是正确的,但我似乎无法弄清楚如何枚举LoadInterface方法的查询结果。
答案 0 :(得分:1)
请注意,当该函数点击return
关键字时,它会退出您的函数。
这就是为什么它只返回一个值。它也没有调用reader.close
。
您应该以{{1}}的形式返回多个值,而不是IEnumerable<string>
。
解决此问题的方法是填充列表。
string
然后您可以这样称呼它:
public IEnumerable<string> PopulateTeamMembers()
{
List<string> returnList = new List<string>();
string queryString = "select setting_main"
+ " from [marlin].[support_config]"
+ " where config_code = 30"
+ " and setting_active = 1"
+ " order by setting_main";
using (var connection = new SqlConnection(_connectionString))
{
var command = new SqlCommand(queryString, connection);
try
{
connection.Open();
using(SqlDataReader reader = command.ExecuteReader())
{
while (reader.Read())
{
returnList.Add(reader[0].ToString());
}
reader.Close();
}
}
catch (Exception ex)
{
// Just let the calling class handle the exception
throw;
}
}
return returnList;
}