gpt4 book ai didi

stored-procedures - 如果存储过程中有多个选择语句,如何使用 SqlDataReader

转载 作者:行者123 更新时间:2023-12-04 09:38:32 25 4
gpt4 key购买 nike

我在 Microsoft SQL Server 2005 的存储过程中编写了三个 select 语句。两个 select 语句都返回多个记录,并且 select 语句的表列表是不同的。一个从主表中选择记录,另一个从子表中选择记录。在 C# 代码中,我想获取所有这些记录并将所有数据放在一个对象中。我正在使用 SqlDataReader。有没有可能,或者我应该做点别的。

最佳答案

您使用 the NextResult datareader 上的方法以使用查询的多个结果进行导航。

要遍历所有数据,您可以执行以下操作:

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 对象的完整初始化。
如果详细结果集按主 ID 排序,则可以优化最后一个循环以仅从字典中查找每个主一次。如果结果集很小,则 yield 不会那么大。

关于stored-procedures - 如果存储过程中有多个选择语句,如何使用 SqlDataReader,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/741625/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com