dpp*_*dpp 4 sql vb.net datareader
我有一个存储过程:
CREATE PROCEDURE [TestProc]
AS
BEGIN
select '1a', '1b'
select '2a', '2b', '2c'
select '3a', '3b'
END
Run Code Online (Sandbox Code Playgroud)
如果我使用SQL Management Studio执行以下查询,
exec TestProc
Run Code Online (Sandbox Code Playgroud)
我得到3个结果集:
1. | 1a | 1b |
2. | 2a | 2b | 2c |
3. | 3a | 3b |
Run Code Online (Sandbox Code Playgroud)
但是当我在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()
Run Code Online (Sandbox Code Playgroud)
我只得到第一个结果集:
| 1a | 1b |
Run Code Online (Sandbox Code Playgroud)
如何使用三个结果集SqlDataReader?甚至三个人SqlDataReader?或者是否可以在VB.NET中的一个查询中获得多个结果集?是DataSet我唯一的选择吗?提前致谢.
您将要使用NextResult()of SqlDataReader来获取下一个结果集:
Reader.NextResult();
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
该OrElse会执行逻辑短circuting:
And Reader.Read()是为了确保您获得下一个结果集的第一行.