所以我对PostgreSQL和VB.net相当新(刚开始阅读)。 我已经完成了研究,并使用Npgsql.dll和Mono.Security.Protocol.Tls.dll作为连接数据库的引用。
我的表格示例
现在我遇到的问题是,当我使用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()
答案 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()