寻找建议:访问数据并填充List/arraylist/list

eri*_*cgr 2 c# arrays list sqldatareader

我希望做这样的事情:

  1. 使用datareader访问db中的记录.我不知道有多少记录会回来 - 大部分时间介于1到300之间.对于每条记录,数据看起来像"0023","Eric","Harvest Circle","Boston".
  2. 我想立即填充一些东西(数组,列表?)并关闭连接.
  3. 将填充的对象传递回我的webservice,然后将其转换为JSON,然后再发送给客户端.

我遇到的问题是用datareader填充数据的对象/对象.我开始使用ArrayList(现在已经阅读了有关使用List的内容),但是虽然我可以取回所有记录(在这种情况下只有2个项目),但我无法访问每个项目中的各个字段(Eric,Boston,等等).

在datareader中输入Plan B:foreach记录,将各个列值添加到数组中,然后将每个数组添加到List中.我认为这会有效,但我不知道如何在不知道需要实例化多少数组的情况下实例化数组.换句话说,我通常会做这个字符串[] myarray = new string [] {"eric","boston","etc"};

但如果我有多个记录,那会是什么样的?填充数组,添加到List,清除原始数组然后重新填充它,将它添加到List等?

任何帮助将不胜感激!此外,我对这样做的替代方式非常开放.

谢谢!

Mic*_*tta 5

这里的标准答案是,使用像实体框架这样的持久层,不如使用您需要的字段创建"实体"类.就像是:

class Customer
{
    public int Id { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

...然后将它们收集到某种类型的集合中.A List<Customer>很好.

List<Customer> customers = new List<Customer>();

string connectionString = null;
using (SqlConnection connection = new SqlConnection(connectionString))
{
    connection.Open();
    SqlCommand command = new SqlCommand("GetData");
    using (IDataReader reader = command.ExecuteReader())
    {
        while (reader.Read())
        {
            Customer c = new Customer();
            c.Id = (int)reader["ID"];
            c.FirstName = (string)reader["FirstName"];
            c.LastName = (string)reader["LastName"];
            customers.Add(c);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

如果您有大量表或可变字段列表,则可能难以维护.但是,对于简单的任务,这很好.