我对此感到愤怒,我无法找到解决方案,因为错误处理程序缺乏信息。 我有一个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()
失败之后我刚刚从错误处理程序中获取:"当没有数据存在时无效的读取尝试"
在这里有一些额外的意见来帮助,真是太感激了。先谢谢。
答案 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
我不得不说,我发现类似物在这里的其他问题中回答了这个问题,这有助于我找到我的特定解决方案。如果您是其中之一,请向他们所有人,或者您。