如果我在存储过程中有多个 select 语句,如何使用 SqlDataReader

2023-11-21

我在 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(使用前将#替换为@)

如果我在存储过程中有多个 select 语句,如何使用 SqlDataReader 的相关文章

  • 从 MySQL 中的列表字符串中获取单个项目

    给定以下代表可能列表的字符串 我如何获取指定索引处的项目n 1 2 3 4 5 word1 word2 word3 pipe delimited list 此功能的可能原因是 从 GROUP CONCAT 输出中提取特定元素 从 SET 列
  • 在游标内使用 Merge 语句

    我们需要填充一个主表 该表由 20 个不同表中的列组成 我编写了一个存储过程来连接一些返回最大列数的表并将它们放在游标中 现在 我正在使用 for 循环来迭代游标记录 以便可以将它们插入主表中 如何在游标 for 循环内使用合并语句 以便我
  • SQL Server返回代码-6,是什么意思?

    我有一个没有任何问题的存储过程 即返回代码为 0 在某些情况下 我会引发用户定义的错误 gt 50000 在这些情况下 回报是 6 我只是好奇 6 是什么意思 我没有在程序中设置返回码 因此这个数字是SQL Server 系统 生成的 我发
  • Html:对于 Select multiple,仅提交一个值,但 .val() 返回两个值的数组

    渲染页面时 val 多重选择的设置为单个值 例如 my select box val 1 然后用户在多选框中选择附加值 提交表单时 仅提交新选择的值 而不提交先前设置的值 而在 Firefox 中调试时 val 函数返回一个包含两个值的数组
  • 如何在 H2 中创建过程

    这似乎与具有相同标题的其他问题重复 但实际上并非如此 我们的业务逻辑主要作为 DB2 存储过程来实现 我看到 H2 有一个 DB2 兼容模式 很好 我们如何使用 H2 通过这些程序进行内存单元测试 不幸的是 H2 似乎缺少 CREATE P
  • 如何使用 mysql 使用输入和输出参数调用 Entity Framework Core 中的存储过程

    我使用 ASP net Core 2 2 与 Entity Framework core 2 2 6 和 Pomelo EntityFrameworkCore MySql 2 2 0 来连接 MySQL 我有一个存储过程 它需要 3 个输入
  • MVC 5 中的存储过程不返回值

    我正在通过数据库方法使用实体框架 MVC5 进行工作 我使用Mysql作为数据库 我创建一个程序 当通话流程在Mysql中它按照我的预期工作 但是当我在 MVC 中使用过程时 它每次都会返回 0 储存程序 CREATE PROCEDURE
  • 删除特定 SQL Server 架构中的所有存储过程

    我有数百个由 DataSync 自动生成的程序 我没有时间和意识手动删除它们 他们都开始于DataSync 有没有办法删除名称开头的所有存储过程DataSync 使用 information schema routines 这在 RDBMS
  • 实体框架:如何检测数据库的外部更改

    我有一个存储过程可以更改数据库中的大量数据 该存储过程是从同时使用 EF 进行数据操作的应用程序调用的 因此 我单击一个按钮 存储过程在数据库中运行 数据发生更改 并且 EF 向用户显示旧数据 有没有办法强制 DbContext 或 Obj
  • Access 2003中可以制作存储过程或函数吗?

    在Access 2003中 我们可以创建存储过程或函数吗 对于 Access 2003 答案是否定的 Access 2010 确实有表触发器和存储过程 这些是真正的引擎级例程 作为行更新的结果运行 因此 导致行修改的表单或 VBA 记录集代
  • 在链接服务器上执行 SP 并将其放入临时表中

    需要有关以下问题的一些帮助 Case 1 存储过程位于服务器 1 上 调用来自服务器 1 declare tempCountry table countryname char 50 insert into tempCountry exec
  • Spring Data JPA NamedStoredProcedureQuery 多个输出参数

    我有一个简单的存储过程 用于测试 Spring Data JPA 存储过程功能 create or replace procedure plus1inout arg in int res1 out int res2 out int is B
  • 使用 EntityFramework 使用空参数值调用存储过程

    我在 sqlserver 2008 上有一个存储过程 其中一个参数接受空值 我不知道如何使用参数上的空值来调用该 SP 为了获得更多上下文 我正在使用 EntityFramework 6xx 在下一个示例中 参数 status Compat
  • 从 PHP 执行 SQL Server 存储过程

    我尝试从 PHP 调用 SQL Server 存储过程 这是我的存储过程 CREATE procedure dbo tester id NVARCHAR MAX AS BEGIN DECLARE tab TABLE myxml XML IN
  • 存储过程上的 OdbcCommand - 输出参数上出现“未提供参数”错误

    我正在尝试执行存储过程 通过 ODBC 驱动程序针对 SQL Server 2005 但收到以下错误 过程或函数 GetNodeID 需要参数 ID 但未提供该参数 ID 是我的过程的 OUTPUT 参数 在存储过程中指定了一个输入 mac
  • 在调用存储过程 Sql Server 2008 时使用嵌套存储过程结果

    是否可以在另一个存储过程中使用一个存储过程的结果 I e CREATE PROCEDURE dbo Proc1 ID INT mfgID INT DealerID INT AS BEGIN DECLARE Proc1Result UserD
  • 如何将存储过程结果映射到自定义类?

    我在用entity framework 5我已经添加了两个存储过程到我的 edmx model 第一个存储过程返回一个字符串 如果我在 Visual Studio 中打开模型浏览器 我可以更改Returns a Collection Of节
  • 仅具有存储过程的实体框架

    我对在我们的场景中仅使用实体框架与存储过程的合理性有疑问 我们计划拥有一个 N 层架构 包括 UI BusinessLayer BLL DataAccessLayer DAL 和 BusinessObjectDefinitions BOD
  • Dapper 或 MySql 未找到包含句号“.”的存储过程。

    我有一个简单的 C 控制台 它使用 Dapper ORM 调用本地 MySql 数据库 以执行名为的存储过程users UserCreate 但是 当运行查询时 我收到一个异常 在数据库 用户 中找不到过程或函数 UserCreate Bu
  • 存储过程错误 PLS-00201:必须声明标识符“UTL_HTTP”

    我正在尝试创建一个从服务请求一些 XML 数据的存储过程 我在网上找到了几个示例 它们都指向使用这个 UTL HTTP 包 但是 每次我尝试用它来编译我的存储过程时 我都会收到错误 PLS 00201 identifier UTL HTTP

随机推荐

  • 删除 TabPage:处置或清除或两者兼而有之?

    我正在开发一个 Windows 窗体 它有一个名为 tabDocuments 的 TabControl 我遇到了这段代码 它从 TabControl 中删除所有页面 for int i tabDocuments TabPages Count
  • 如何在 IE8 中触发自定义 JavaScript 事件?

    我正在尝试在 IE8 上触发自定义事件并一起摆弄解决方案here and here 但我无法让它工作 我正在将 jquery mobile 与 requireJS 和谷歌分析一起使用 所以我正在跟踪 JQMpageshow事件 然而 由于
  • 如何设置服务来传递Google Sheet ID? AngularJS

    我正在使用 Angular 构建一个小部件 它接受用户给出的 Google Sheet Ids 并以漂亮的 json 格式发布输出 问题是我的代码什么也没做 控制台中没有错误 当我添加 ID 时没有任何反应 我想问题出在服务 js angu
  • Windows 8/8.1/10 中不显示名称为“卸载 <程序名称>”的快捷方式

    使用 MSI 安装程序 我们在 Windows 7 8 8 1 10 操作系统上创建应用程序快捷方式 除了应用程序快捷方式之外 我们还为程序创建卸载快捷方式 Win7 之前的快捷方式路径 ProgramsMenuFolder 公司名称 产品
  • 带有每个角色视图的客户端模板

    我一直在读关于AngularJS它看起来非常有前途 这是我想要弄清楚的唯一一件事 不是特定于框架的 但它对于客户端模板来说是通用的 假设您有一个具有多个角色的 Web 应用程序 每个角色可能包含附加功能 所以您不能为每个角色使用不同的模板
  • 如何在 HTML 中的新选项卡中打开链接?

    我正在开发一个 HTML 项目 但我不知道如何在没有 JavaScript 的情况下在新选项卡中打开链接 我已经知道了 a href http www WEBSITE NAME com a 在同一选项卡中打开链接 有什么想法如何让它在新的中
  • React.js 从子函数调用父函数

    我知道有几个类似的问题here and here但我很难理解今天对此的正确想法是什么 并将其推断到我的情况 我有一个简单的应用程序 ScoreBox 有一个 ScoreList 其中有很多分数 我想要一个 Score onClick 调用
  • R 安装包 RevoScaleR

    在尝试安装包 RevoScaleR 时 出现以下错误 我尝试过使用各种版本的 R 安装此软件包 但每次都会出现相同的错误 有谁知道为什么吗 install packages RevoScaleR install packages 中的警告
  • 在Python中检测Windows 8.1?

    我们有一个使用的脚本平台模块检测我们各种客户端的操作系统版本 查看platform py的源代码 我可以看到在Windows系统上 它使用sys getwindowsverion 不幸的是 在 Windows 8 1 系统上 该特定函数报告
  • Eclipse 中的 Python 文档

    有没有办法将标准Python文档集成到Eclipse中 因此 可以在 API 函数上按 F1 并在 Eclipse 的帮助视图中获取其描述 我使用 PyDev Thanks 我也遇到了同样的问题 所以我为此目的制作了一个 Eclipse 插
  • 如何保存并检查文件是否存在于作用域存储中?

    到目前为止 我检查文件是否存在 如果不存在 则将其保存到 Environment getExternalStoragePublicDirectory Environment DIRECTORY PICTURES 中的设备 但 Android
  • 在没有 DataBind 的情况下向 GridView 添加新行

    我有一个 GridView 它允许随时编辑每一列 每一行中的值 用户输入所有更改 单击 保存 一次 所有更改均已提交 用户还必须能够单击 新建 按钮 在 GridView 中显示一个新行 是的 它必须显示在实际的 GridView 中 输入
  • 当 C++ 标准提供将名称引入全局命名空间的 C 标头时,这是否包括重载?

    即将推出的 C 0x 标准的最终委员会草案表示 每个 C 标头 每个标头都有一个 name h 形式的名称 其行为就像 标准中的每个名称 库名称空间由相应的 cname 标头位于 全局命名空间范围 这是 未指定这些名称是否是 首先声明或定义
  • MYSQL根据列数据和表名连接表

    我想知道这是否可能 我想根据表1的数据连接2个表 示例表 1 具有列 food 其数据为 hotdog 我有一张桌子叫热狗 是否可以进行 JOIN 之类的操作 SELECT FROM table1 t join t food on id f
  • DDD:聚合根

    我需要帮助来找到我的聚合根和边界 我有 3 个实体 计划 计划角色和计划培训 每个计划可以包含许多 PlannedRoles 和 PlannedTrainings 解决方案 1 起初我认为 Plan 是聚合根 因为脱离 Plan 的上下文
  • vim 中使用 powershell 的 system()

    我正在尝试在 Vim 中编写一个简单的函数来返回 powershell 命令的结果 不过 我的结果总是乱七八糟 我认为这可能是一个编码问题 但正如您所看到的 这个问题很奇怪 因为它 有点有效 但我没有任何解决问题的办法 在 vim 中设置以
  • 警报对话框或自定义警报对话框的大小

    我正在为 10 1 的所有平板电脑创建应用程序 现在我正在三星 Galaxy 选项卡上尝试此操作 我已经完成了所有部分 但关于平板电脑尺寸的警报对话框太小 我还创建了自定义警报对话框 但看起来不太好 那么告诉我我可以更改默认警报对话框的大小
  • 当 AutoGenerateColumns 设置为 True 时,如何停止在 DataGrid 中生成特定列?

    我已将 ObservableCollection 绑定到DataGrid并设置AutoGenerateColumns在具有 MVVM 应用程序的 WPF 中为 true 那我该怎么办stop a specific column要出现在 Da
  • 如何在 C# 中每隔几秒调用一个特定方法?

    机器人游戏 是我开发的第一个基础游戏 洋红色 角色是敌人 它应该在这张地图中随机移动 但它的随机移动太快 我尝试使用线程 但它会影响所有角色的速度 现在 我需要每 100 毫秒调用一次 Enemy 方法 Robot game Image 您
  • 如果我在存储过程中有多个 select 语句,如何使用 SqlDataReader

    我在 Microsoft SQL Server 2005 的存储过程中编写了三个 select 语句 两个 select 语句都返回多个记录 并且 select 语句的表列表不同 一个从主表中选择记录 另一个从子表中选择记录 在 C 代码中