尝试将Vb.net与PostgreSQL数据库集成时NpgsqlDatareader的问题

时间:2013-06-13 15:09:24

标签: vb.net postgresql npgsql

所以我对PostgreSQL和VB.net相当新(刚开始阅读)。 我已经完成了研究,并使用Npgsql.dll和Mono.Security.Protocol.Tls.dll作为连接数据库的引用。

|条形码|项|类型|接收|除去| on_hand |

| ien0001 | thing1 | TYPE1 | 1 | 2 | 3 |

| ien0002 | thing2 | 2型| 4 | 5 | 6 |

| ien0003 | thing1 | TYPE1 | 7 | 8 | 9 |

我的表格示例

现在我遇到的问题是,当我使用myReader.GetString(0)时,返回的值始终为0.现在如果我将此行硬编码到下面,我将得到数据库中的实际值。我不确定我是在做一些愚蠢的事情,还是我在脑子里。任何建议都会很棒。我希望这个问题很清楚。如果没有,请告诉我,我会尝试改写。这也是我第一次发帖,所以让我知道我的格式是否糟糕。

谢谢

此外,如果我不对条形码进行硬编码(没有双关语),则永远不会执行if语句。

我也忘了提到我想要完成的事情。我试图使用名为code的VB变量查询数据库。然后根据查询结果(最多只有一个结果)从列中提取一个值并将其保存到另一个变量。

如果还有其他方式,请告诉我。 感谢

mySQLString =“SELECT On_Hand FROM total_inventory WHERE Barcode ='ien0002';”

 code = "'ien0001'"   'code is a string
    myConnection.ConnectionString = "Server=###.###.###.###;Port=####;Database=inventory;User Id=inventory_user;Password=$$$$$$;" 
    myConnection.Open()
    myCommand = New NpgsqlCommand(mySQLString, myConnection)
    myCommand.ExecuteNonQuery()
    myReader = myCommand.ExecuteReader
    If myReader.Read() Then
    CurrentQty = CInt(myReader.GetString(0))
    MsgBox(":" & CurrentQty)
    End If
    myReader.Close()
    MsgBox(CurrentQty)
    myConnection.Close()

1 个答案:

答案 0 :(得分:0)

删除

周围的单引号
code = "ien0001" 

并使用参数化查询。框架代码非常智能,可以识别您传递的是字符串并在字符串周围放置正确的引号,而无需手动执行(并产生错误)

所以如果我的假设是正确的那么你写

Dim code = "ien0001" 
mySQLString = "SELECT On_Hand FROM total_inventory WHERE Barcode = :code;"
myConnection.ConnectionString = "Server=###.###.###.###;Port=####;Database=inventory;User Id=inventory_user;Password=$$$$$$;" 
myConnection.Open()
myCommand = New NpgsqlCommand(mySQLString, myConnection)
myCommand.Parameters.AddWithValue(":code", code)
myCommand.ExecuteNonQuery()
myReader = myCommand.ExecuteReader
If myReader.Read() Then
    CurrentQty = CInt(myReader.GetString(0))
    MsgBox(":" & CurrentQty)
End If
myReader.Close()
MsgBox(CurrentQty)
myConnection.Close()