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,但这取决于调用者的期望),然后通过调用 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;
}
于 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 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 回答
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 回答