C# 当读卡器关闭时调用Read的尝试无效。ExecuteReader以获取多个表结果

C# 当读卡器关闭时调用Read的尝试无效。ExecuteReader以获取多个表结果,c#,.net,vb.net,sqldatareader,C#,.net,Vb.net,Sqldatareader,我尝试使用SqlDataReader返回(DataTable的)列表,而不是填充数据集。在读卡器正确检索了4个表之后,出现了“当读卡器关闭时调用Read的尝试无效”错误。这是我正在使用的函数 Private Function ExecuteDS(ByVal SPName As String, ByVal ParamList As List(Of System.Data.SqlClient.SqlParameter)) As List(Of System.Data.DataTable) D

我尝试使用SqlDataReader返回(DataTable的)列表,而不是填充数据集。在读卡器正确检索了4个表之后,出现了“当读卡器关闭时调用Read的尝试无效”错误。这是我正在使用的函数

Private Function ExecuteDS(ByVal SPName As String, ByVal ParamList As List(Of System.Data.SqlClient.SqlParameter)) As List(Of System.Data.DataTable)
    Dim ds As New List(Of System.Data.DataTable)
    Dim dbConStr As Database  
    dbConStr = New Database()
    Using con As New System.Data.SqlClient.SqlConnection(dbConStr.ReturnString)
        Dim cmd As New System.Data.SqlClient.SqlCommand(CStr(SPName), con)
        cmd.CommandType = System.Data.CommandType.StoredProcedure
        cmd.CommandTimeout = 30
        For Each p As System.Data.SqlClient.SqlParameter In ParamList
            cmd.Parameters.Add(p)
        Next

        con.Open()
        Using dr As System.Data.SqlClient.SqlDataReader = cmd.ExecuteReader
            If dr.HasRows Then
                Do While dr.Read()
                    Dim dt As New System.Data.DataTable
                    dt.Load(dr)
                    ds.Add(dt)
                Loop
            End If
        End Using

        con.Close()
    End Using
    Return ds
End Function
错误发生在
dr.Read()
处。它应该返回4个表,但在得到第4个表之后,它仍然继续并尝试执行
dr.Read()
,并抛出错误,而不是正确地退出循环。如有任何见解,我将不胜感激,谢谢

编辑:还尝试了dr.NextResult()的方法,但仍然在同一行中得到错误

            Using dr As System.Data.SqlClient.SqlDataReader = cmd.ExecuteReader
                Do While dr.HasRows
                    Do While dr.Read()
                        Dim dt As New System.Data.DataTable
                        dt.Load(dr)
                        ds.Add(dt)
                    Loop
                    dr.NextResult()
                Loop
            End Using
编辑2:尝试在IF语句中使用dr.HasRows,但仍在dr.Read()处获得错误


如果没有NextResut,则不需要测试HasRows

在C#
最后一段时间将导致它立即离开

using (IDataReader reader = ...) 
{ 
  do 
  {
    if (reader.HasRows())
    {
       while (reader.Read()) 
       { 
           ....
       }
    }
  } while (reader.NextResult())
}

当我使用它时,你应该使用它,它跳过我结果中的表。它从我的结果中返回表0和表2。。因此,我无法从结果集中获取表1和表3。请尝试DataTableReader,而不是DataReader DataRow。当我以这种方式尝试时,在同一个地方出现了同样的错误。在我的示例代码中,在我的“ds”对象中有4个表,然后在dr.Read()处抛出错误。我将我的代码作为编辑2发布在主帖子中。谢谢你的回复。
using (IDataReader reader = ...) 
{ 
  do 
  {
    if (reader.HasRows())
    {
       while (reader.Read()) 
       { 
           ....
       }
    }
  } while (reader.NextResult())
}