从数据库中读取后返回一个列表

本文关键字:一个 列表 返回 数据库 读取 | 更新日期: 2023-09-27 18:00:04

我正在尝试从数据库中的Names表中检索所有Names。我无法检索数据并将其作为lIst返回。我该怎么做?

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

从数据库中读取后返回一个列表

您可以迭代返回的所有行,如下所示:

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;

首先实例化列表以保存项目(也可以将其保留为null,但这取决于调用方的期望),然后通过调用Read()迭代数据读取器,直到它返回false,这意味着没有更多的记录可用。

当数据读取器有记录时,您可以通过调用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;
}

请参阅我的代码示例:

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

有几种不同的方法,但这可能是最直接的方法。

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