1

所以我对 PostgreSQL 和 VB.net 还很陌生(刚开始读)。我已经完成了研究,并且正在使用 Npgsql.dll 和 Mono.Security.Protocol.Tls.dll 作为连接数据库的参考。

|条码|项目|类型|已收到|已移除|on_hand|

|ien0001|thing1|type1| 1 | 2 | 3 |

|ien0002|thing2|type2| 4 | 5 | 6 |

|ien0003|thing1|type1| 7 | 8 | 9 |

我的表示例

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

谢谢

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

我也忘了提到我想要完成的事情。我正在尝试使用称为代码的 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()
4

1 回答 1

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()
于 2013-06-13T15:20:09.987 回答