2014-03-28 34 views
0

由于错误处理程序缺少大量信息,因此我无法找到解决方案。 我有一个PostGreSQL数据库,我正在使用Npgsql.dll合并,现在一切正常。除了这样的事情:Npgsql DataReader当数据不存在时,无法读取数据

我有一个“测试”表与2列(名称,说明)和4行。

进出口使用“博士为NpgsqlDataReader”执行一个简单的命令

“SELECT * FROM测试”

,但没有理由它不工作在所有的,几乎没有额外的信息或帮助,这似乎是与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() 

故障后,我刚刚从错误处理程序获得:“无效的尝试时,不存在数据读”

这将是如此gratefull有一些额外的意见在这里帮助。感谢提前。

回答

1

我发现这个问题,它没有直接关系

无效尝试当没有数据存在

错误阅读。

虽然dr.HasRowsFORBIDDEN

旧文件没有这个布尔过程的明确解释。

某事例如像解释真如果意味着“dr”在查询的一般内容中或在实际指针位置后面(在本例中为“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 

,我不得不说,我发现同类者回答这其他问题帮助我找到了我的特殊解决方案。对他们所有人,或者你,如果你是他们中的一员。

相关问题