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

MAR*_*att 1 c#

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

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

  1. 执行存储过程
  2. 在数据集中获取结果
  3. 填充数据集中的列表.

有没有办法消除步骤(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);
    }
}
Run Code Online (Sandbox Code Playgroud)

mar*_*c_s 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;    
}
Run Code Online (Sandbox Code Playgroud)

有关详细信息OleDbReader以及如何使用它,请参阅其他SO问题或使用Bing或Google在线查找大量教程和示例.