sql - VB.NET - 一个查询中有多个结果集?

标签 sql vb.net datareader

我有一个存储过程:

CREATE PROCEDURE [TestProc]
AS
BEGIN
   select '1a', '1b'
   select '2a', '2b', '2c'
   select '3a', '3b'
END

如果我使用 SQL Management Studio 执行以下查询,

exec TestProc

我得到 3 个结果集:

1. | 1a | 1b |

2. | 2a | 2b | 2c |

3. | 3a | 3b |

但是当我在ASP.NET(VB.NET)中使用存储过程时,

Dim Connection As New SqlConnection(ConfigurationManager.ConnectionStrings("ConnToHilmarc").ToString)
Dim Command As New SqlCommand("exec TestProc @First, @Second", Connection)
Dim Reader As SqlDataReader

Command.Parameters.AddWithValue("@First", "Hello")
Command.Parameters.AddWithValue("@Second", "World")

Connection.Open()
Reader = Command.ExecuteReader

While Reader.Read
    Response.Write(Reader(0) & " " & Reader(1) & "<br/>")
End While

Reader.Close()
Connection.Close()

我只得到第一个结果集:

| 1a | 1b |

如何使用SqlDataReader获取三个结果集?或者甚至三个SqlDataReader?或者是否可以在 VB.NET 中通过一次查询获取多个结果集? DataSet 是我唯一的选择吗?提前致谢。

最佳答案

您需要使用 SqlDataReaderNextResult() 来获取下一个结果集:

Reader.NextResult();

SqlDataReader.NextResult() 如果存在另一个结果集,则返回 true,否则返回 false,因此您可以(在示例代码中)使用以下循环来避免 3 组代码执行本质上的操作同样的事情:

Using Connection As New SqlConnection(ConfigurationManager.ConnectionStrings("ConnToHilmarc").ToString())

    Dim Command As New SqlCommand("exec TestProc @First, @Second", Connection)
    Dim Reader As SqlDataReader

    Command.Parameters.AddWithValue("@First", "Hello")
    Command.Parameters.AddWithValue("@Second", "World")

    Connection.Open()
    Reader = Command.ExecuteReader()

    While Reader.Read() OrElse (Reader.NextResult() And Reader.Read())
        For i As Integer = 0 To Reader.FieldCount - 1
            Response.Write(Reader(i).ToString()
            Response.Write(" ")
        Next

        Response.Write("<br />")
    End While

    Reader.Close()

End Using

OrElse 将执行逻辑短路:

  1. 如果 Reader.Read() 返回 true,它将读取下一行而不调用 Reader.NextResult()(这将使读取器前进到下一个结果并可能导致数据丢失)。 And Reader.Read() 的作用是确保您获得下一个结果集的第一行。
  2. 如果 Reader.Read() 为 false,则将计算下一个表达式 (Reader.NextResult()) - 如果为 true,则将处理下一个结果集。
  3. 如果两者都为 false,则退出循环。

关于sql - VB.NET - 一个查询中有多个结果集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7005930/

相关文章:

c# - 为数据读取器结果动态创建 JSON 对象,无论它们是什么样子?

python - 使用 pandas datareader 拉取股票信息

sql - 当我显示数据并仅获取 hh :mm:ss am format? 时,是否可以从 Oracle SQL DATE 隐藏 dd-mon-yyyy 组件

php - 在 Postgres 数据库上从 PHP (Kohana) 运行批处理 SQL 脚本的首选方式是什么

vb.net - 编写 Dispatcher.Invoke VB.NET

WPF VB DataGridCombox DataGridRow

c# - DataReader - 读取未知长度的数据

php - 拉维 SQL Server : SQLSTATE[HY000]: [unixODBC][Microsoft][ODBC Driver 13 for SQL Server]Protocol error in TDS stream

c# - 改进文本框 C# 中的条形码搜索

vb.net - 如何通过 "String Name"获取控制属性?