1

.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 メソッドからのクエリ結果を列挙する方法がわかりません。

4

1 に答える 1

1

return関数がキーワードにヒットすると、関数が終了することに注意してください。これが、1 つの値のみを返す理由です。も呼び出していませんreader.close

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;
    }

その後、次のように呼び出すことができます。

   private void LoadInterface()
   {
       DatabaseHandle testing = new DatabaseHandle();
       IEnumerable<string> teammembers = testing.PopulateTeamMembers();
       foreach(string value in teammembers)
       {
           comboBoxResolvedBy.Items.Add(value);
       }
   }
于 2012-08-11T06:32:16.247 に答える