将存储过程结果填充到List <t> </t>

时间:2014-10-19 06:57:34

标签: c#

有没有办法将存储过程的结果映射到通用列表而不是数据集/数据表?

目前我按照以下步骤操作:

  1. 执行存储过程
  2. 在数据集中取结果
  3. 从数据集中填充列表。
  4. 有没有办法消除步骤(2)。

    OleDbCommand cm = new OleDbCommand();
    cm.Connection = AccessConnection();
    cm.CommandType = CommandType.StoredProcedure;
    cm.CommandText = "seltblContacts";
    
    OleDbDataAdapter adp = new OleDbDataAdapter(cm);
    
    DataTable dt = new DataTable();
    adp.Fill(dt);
    
    List<tblContacts> LstFile = new List<tblContacts>();
    
    if (dt.Rows.Count > 0)
    {
        tblContacts t;
    
        foreach (DataRow dr in dt.Rows)
        {
            t = PopulateContacts(dr);
            LstFile.Add(t);
        }
    }
    

1 个答案:

答案 0 :(得分:5)

当然可以这样做 - 只需执行命令并返回阅读器,然后遍历结果集中的行并构建对象:

using (OleDbCommand cm = new OleDbCommand())
{
     cm.Connection = AccessConnection();
     cm.CommandType = CommandType.StoredProcedure;
     cm.CommandText = "seltblContacts";

     List<tblContacts> LstFile = new List<tblContacts>();

     using (OleDbReader reader = cm.ExecuteReader()) 
     {
        while(reader.Read())
        {
            tblContacts contact = new tblContacts();

            // here, set the properties based on your columns from the database
            contact.FirstName = reader.GetString(0);    
            contact.LastName = reader.GetString(1);
            // etc.

            LstFile.Add(contact);
        }

        reader.Close();
     }

     return LstFile;    
}

有关OleDbReader以及如何使用它的详细信息,see this other SO question或使用Bing或Google在线查找大量教程和示例。