首页 > 解决方案 > 如何从 DataReader 检索第二个结果集到 Datatable?

问题描述

我有一个 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 列的表格

标签: c#entity-framework

解决方案


在阅读器未关闭之前,您可以加载更多表格。如果您有多个结果,我建议您填充 a 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;
}

推荐阅读