如何将第二个结果集从DataReader检索到Datatable?

时间:2019-04-24 17:52:32

标签: c# entity-framework

我有一个sp,它带回了两组结果。我需要将它们都放在数据表中,然后将它们转换为数据模型。

如何获得第二组结果?

 SqlConnection connection = new SqlConnection(connectionstring);
                ce.Database.Initialize(force: false);    
                connection.Open();

                SqlCommand cmd = new SqlCommand("GetJournal", connection);
                cmd.CommandType = System.Data.CommandType.StoredProcedure;                  

                SqlDataReader reader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
                var dataTable = new DataTable();
                dataTable.Load(reader);
                List<Header> headerList = dataTable.AsEnumerable().Select(values =>
                                                                   new Header
                                                                   {
                                                                       HeaderId = values.Field<Int32>("HeaderId").ToString()                                                                   
                                                                   }).ToList();

                myList1 = headerList;
                myList2 = detailList; <_---- I need to populate detail list

还为所有字段明确命名是加载此列表的最有效方法吗?我可以代替某种序列化吗?我最多可以有500列的表格

1 个答案:

答案 0 :(得分:1)

在没有关闭阅读器之前,您可以加载其他表。如果您有多个结果,建议您填充一个DataSet,其中可以包含多个DataTable实例:

public static DataSet ToDataSet(IDataReader reader)
{
    DataSet ds = new DataSet();
    while (!reader.IsClosed)
    {
        DataTable dt = new DataTable();
        dt.Load(reader);
        ds.Tables.Add(dt);
    }

    return ds;
}