gpt4 book ai didi

c# - SqlDataReader 获取特定的 ResultSet

转载 作者:太空宇宙 更新时间:2023-11-03 19:52:06 32 4
gpt4 key购买 nike

当查询返回多个结果时,我们使用 SqlDataReaderNextResult() 在它们之间进行迭代。这样我们就可以按顺序访问结果。

有没有办法以随机/非顺序方式访问结果。例如先跳到第三个结果,然后跳到第一个 e.t.c

我正在搜索是否有类似 rdr.GetResult(1) 的东西,或者解决方法。

自从有人问我为什么我想要这样的东西,

  • 首先,我无权访问查询,因此我无法更改,因此在我的客户端中,我将按照服务器写入/生成结果的顺序获得结果。
  • 要处理(构建集合、实体 --> 业务逻辑)第一个,我需要第二个和第三个的信息。
  • 同样,由于修改某些代码不是一个选项,我无法以某种方式(不编写大量代码)“存储”连接信息(例如 ID),以便在后面的步骤中连接这两个结果集
  • 最“优雅”的解决方案(肯定不是唯一的)是以非顺序方式处理结果集。所以这就是为什么我要问是否有这样的方法。

13 月 6 日更新

同时 Jeroen Mostert answer原因 进行了深思熟虑的解释,Think2ceCode1ce answer显示解决方法的正确方向。 link的内容在评论中,如何利用额外的 datasetasync 方式工作。恕我直言,如果要编写通用解决方案,这将是可行的方法。但是,就我而言,我的解决方案基于数据的性质及其背后的逻辑。简而言之,(1) 我使用 SqlDataReader 按顺序读取数据; (2)当我读取行中的第一个但逻辑结果集中的第二个时,我将一些我需要的数据存储在字典和集合中; (3) 当我读取行中的第三行时,但首先在逻辑 ResultSet 中,我正在遍历我之前构建的集合,并基于我正在构建最终结果的字典数据。

最终的代码似乎比使用 async DataAdapter 更高效且更易于维护。然而,这是一个基于我的数据的非常具体的解决方案。

最佳答案

Provides a way of reading a forward-only stream of rows from a SQL Server database.

https://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqldatareader(v=vs.110).aspx

您需要使用 DataAdapter 进行断开连接和非顺序访问。要使用它,您只需更改一点 ADO.NET 代码。

代替

SqlDataReader sqlReader = sqlCmd.ExecuteReader();

你需要

DataTable dt = new DataTable();
SqlDataAdapter sqlAdapter = new SqlDataAdapter(sqlCmd);
sqlAdapter.Fill(dt);

如果您的 SQL 返回多个结果集,您将使用 DataSet 而不是 DataTable,然后访问结果集,如 ds.Tables[index_or_name].

https://msdn.microsoft.com/en-us/library/bh8kx08z(v=vs.110).aspx

关于c# - SqlDataReader 获取特定的 ResultSet,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37729000/

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