.net 即使查询在db中运行良好,dr.HasRow始终为False

.net 即使查询在db中运行良好,dr.HasRow始终为False,.net,vb.net,.net,Vb.net,我有一个代码,它有OracleReader,它有dr.HasRows,它总是为False,但同一个查询以db为单位给出结果 Public Function Getmydata() As String Dim sql As String Dim rows As New List(Of Dictionary(Of String, Object)) Dim row As Dictionary(Of String, Object) Dim conn A

我有一个代码,它有OracleReader,它有dr.HasRows,它总是为False,但同一个查询以db为单位给出结果

 Public Function Getmydata() As String
      Dim sql As String
      Dim rows As New List(Of Dictionary(Of String, Object))
      Dim row As Dictionary(Of String, Object) 
      Dim conn As New OracleConnection(oradb)

    Try

      If conn.State = ConnectionState.Closed Then
         conn.Open()
      End If

      sql = "select name, city, address, phone from Students" 

      Dim cmd As New OracleCommand(sql, conn)
      Dim dr As OracleDataReader = cmd.ExecuteReader

      If dr.HasRows Then

        Do While dr.Read()

         row = New Dictionary(Of String, Object)
         For c As Integer = 0 To dr.FieldCount - 1 
             row.Add(dr.GetName(c), dr.GetValue(c)) 
         Next

        rows.Add(row)
      Loop
     End If

    Return New JavaScriptSerializer().Serialize(rows)
在这里,您可以看到Dim dr作为OracleDataReader=cmd.ExecuteReader 这部分有dr.HasRows,它为False,所以我无法从表中检索任何行` 谢谢你的帮助

谢谢

将代码更改为:

  If dr.HasRows Then
   row = New Dictionary(Of String, Object)
   Do While dr.Read()      
     For c As Integer = 0 To dr.FieldCount - 1 
         row.Add(dr.GetName(c), dr.GetValue(c)) 
     Next

    rows.Add(row)
   Loop
 End If
i、 e:把下面的一行放在循环外

   row = New Dictionary(Of String, Object)
我解决了这个问题


<>我写了查询语句的选择、从何处、在大写字母< /p>中为什么要标记java、C++、C、ASP.NET?删除不必要的标签。不要添加不相关的标签。不知道为什么它会返回false,但是为什么你一开始就需要它呢?如果没有行,dr.Read将返回false。此程序是否连接到同一服务器?检查你的conn连接字符串和你的tnsnames.ora。我也对那个部分连接字符串表示怀疑,但它在我看来很好,而其他部分在同一个.vb文件中工作也很好,但这一个让我错了。根据我在谷歌上的研究,这实际上也是一个常见问题,但几乎没有实际结果。它甚至没有走那么远。对不起,我在路上回答了你,我以为你的问题是字典里没有行。您有任何非unicode字符吗?你有什么错误吗?是否确实连接到了正确的服务器?请尝试:从选项卡中选择*好吗