Npgsql DataReader无数据存在时读取的尝试无效

时间:2014-03-28 04:13:49

标签: database vb.net postgresql datareader npgsql

我对此感到愤怒,我无法找到解决方案,因为错误处理程序缺乏信息。 我有一个PostGreSQL数据库,我正在使用Npgsql.dll进行连接,现在一切正常。除了像这样的事情:

我有一个"测试"包含2列(名称,描述)和4行的表。

我使用" dr作为NpgsqlDataReader" 来执行一个简单的命令

  

" SELECT * FROM test"

但是没有理由它根本没有用,几乎没有额外的信息或帮助,当我收到错误时,它似乎与npgsql.dll有关。

dr = comando.ExecuteReader()

        dr.Read()
        Debug.Print("{0}", dr.Item(1)) //Works, give "description" value data 
        Debug.Print("{0}", dr.Item(0)) //Works, give "name" value data
        Debug.Print("{0}", dr.GetName(0)) //Works, give column name "name"
        Debug.Print("{0}", dr.GetString(0)) //Works, again, same "name" value data
        Debug.Print("{0}", dr.GetValue(0)) //Works, same "name" value data
        While dr.HasRows

            For i As Integer = 0 To (dr.FieldCount - 1) //in this case, this is (2-1)
                Debug.Print("{0}", dr.GetName(i)) //works, give column name "name"
                Debug.Print("{0}", dr.Item(i))  //FAILSSSS
                'MsgBox(String.Format("{0}: {1}", dr.GetName(i), dr.Item(i))) //FAILSS
            Next
            dr.Read()
        End While
        dr.Close()

失败之后我刚刚从错误处理程序中获取:"当没有数据存在时无效的读取尝试"

在这里有一些额外的意见来帮助,真是太感激了。先谢谢。

1 个答案:

答案 0 :(得分:1)

我发现了问题,它并没有直接与

相关
  

无数据存在时读取无效

错误。

  

虽然dr.HasRows 禁止

旧文档没有对此布尔过程的明确解释。

例如解释是否为真意味着" dr"在查询的GENERAL中有行,或者在实际指针位置之后(在这种情况下" dr.read()")。

显然(不适合我):"通常",对于收到的查询命令,总是为TRUE或FALSE。

Postgres用缺乏数据回答这个问题,远离问题并且让我困惑

最好的用法:

If dr.HasRows Then
   While dr.Read()
         For i As Integer = 0 To (dr.FieldCount - 1)
             Debug.Print("{0}", dr.GetName(i))
             Debug.Print("{0}", dr.GetString(i))
             MsgBox(String.Format("{0}: {1}", dr.GetName(i), dr.Item(i)))
         Next
   End While
   dr.Close()
End If

我不得不说,我发现类似物在这里的其他问题中回答了这个问题,这有助于我找到我的特定解决方案。如果您是其中之一,请向他们所有人,或者您。