1

データベースの名前テーブルからすべての名前を取得しようとしています。データを取得してリストとして返すことができません。どうすればできますか?

public List<SelectListItem> getNames()
        {
             try
            {
                using (SqlCommand com = new SqlCommand("SELECT * FROM Names", con))
                {
                    con();
                    SqlDataReader dr = com.ExecuteReader();

                    return ?? // How to return the items that was returned 

                }
            }
 .......
4

4 に答える 4

1

最初にリストをインスタンス化してアイテムを保持し(nullのままにすることもできますが、呼び出し元の期待に応じて異なります)、次に、falseが返されるまでRead()を呼び出してデータリーダーを反復処理します。これは、使用可能なレコードがなくなることを意味します

データリーダーにレコードがある場合、GetString、GetInt、GetLongなどのメソッドのいずれかを呼び出して、パラメーターとしてフェッチする列を指定することにより、列をフェッチできます。

リストに格納するタイプを作成し、取得した値をそのプロパティに追加し、新しいタイプをリストに追加します。

public List<SelectListItem> getNames()
{
    var list = new List<SelectListItem>();
    try
    {
       using (SqlCommand com = new SqlCommand("SELECT * FROM Names", con))
       {
           con();
           SqlDataReader dr = com.ExecuteReader();
           while (dr.Read())
           {
               list.Add(new SelectListItem { 
                          Value = dr.GetString(0), // first column, depends on your table 
                          Text = dr.GetString(1)  // second column, depends on your table
                }); 
           }
    catch(Exception e)
    {
        Trace.WriteLine(r.Message);
    }
    return list;
}
于 2013-02-18T19:51:17.073 に答える
1

次のように、返されたすべての行を反復処理できます。

var items = new List<SelectListItem>();
while (dr.Read()) 
{
  var valueInColumn1 = dr[1];
  var valueInNamedColumn = dr["ColumnName"];
  ...
  items.Add(new SelectListItem { Text = valueInColumn1.ToString(), Value = valueInNamedColumn.ToString()); 
}
return items;
于 2013-02-18T19:47:33.733 に答える
0

いくつかの方法がありますが、おそらくこれが最も簡単です。

public List<SelectListItem> getNames()
{
    var list = new List<SelectedListItem>();
    try
    {
        using (SqlCommand com = new SqlCommand("SELECT * FROM Names", con))
        {
            con();
            SqlDataReader dr = com.ExecuteReader();

            while (dr.Read())
            {
                var item = new SelectedListItem();
                item.Value = dr[0];
                list.Add(item);
            }
        }
    }
    catch(Exception ex)
    {
        // ...
    }

    return list;
}
于 2013-02-18T19:48:06.940 に答える
0

私のコード例を見てください:

  public static List<ActionItem> GetAllActions()
        {
            var actionItems = new List<ActionItem>();
            SqlDataReader actionsReader = CatalogDB.GetAllActions();

            try
            {
                while (actionsReader.Read())
                {
                    actionItems.Add(new ActionItem
                                        {
                                            Id = (int)actionsReader["Id"],
                                            Name = actionsReader["Name"] != DBNull.Value ? (string)actionsReader["Name"] : null,
                                            Description = (string)actionsReader["Description"],
                                            CreationDate = (DateTime)actionsReader["CreationDate"]                                                
                                        }
                        );
                }
            }
            finally
            {
                actionsReader.Close();
            }

            return actionItems;
        }
于 2013-02-18T19:46:47.770 に答える