我在 Microsoft SQL Server 2005 的存储过程中编写了三个 select 语句。两个 select 语句都返回多个记录,并且 select 语句的表列表不同。一个从主表中选择记录,另一个从子表中选择记录。在 C# 代码中,我想获取所有这些记录并将所有数据放入一个对象中。我正在使用 SqlDataReader。是否可以使用它或者我应该做其他事情。
You use 下一个结果数据读取器上的方法,用于导航查询的多个结果。
要循环遍历所有数据,您可以执行以下操作:
var moreResults = true;
while (moreResults)
{
while (reader.Read())
{
...
}
moreResults = reader.NextResult();
}
因此,以此为背景,并假设主结果集首先出现,填充主对象和详细对象可以如下完成:
首先,建立主记录的字典:
var masters = new Dictionary<int, Master>();
var idOrdinal = reader.GetOrdinal("id");
while (reader.Read())
{
var id = reader.GetInt32(idOrdinal);
masters.Add(id, new Master{Id=id, ....});
}
接下来,继续详细记录并将其添加到相应的主记录中:
reader.NextResult();
var masterIdOrdinal = reader.GetOrdinal("masterId");
while (reader.Read())
{
var masterId = reader.GetInt32(masterIdOrdinal);
var master = masters[masterId];
master.Details.Add(new Detail{....});
}
显然,您应该将列名称替换为数据中的名称,并提供 Master 和 Detail 对象的完整初始化。
如果详细结果集按 master id 排序,则最后一个循环可以优化为仅从字典中查找每个 master 一次。如果结果集很小,那么收益不会那么大。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)