这是给出错误的代码,查询返回特定项目的值。

同样在数据库方面,查询返回行,即使我已经提出条件,如果读者有行,则仅将其分配给变量,但仍然会引发错误,例如。

dqty = sqlreader("qty")

码:
Private Function checkquantity(ByVal code As String, ByVal quan As Integer) As Boolean
    sqlcommand.CommandText = "select sum(qty) as qty from pos_stock_balance where item_code='" & code & "'"
    sqlcommand.Connection = AppsCon
    sqlreader = sqlcommand.ExecuteReader
    If sqlreader.HasRows Then

        dqty = sqlreader("qty")
        sqlreader.Close()

    Else
        sqlreader.Close()
    End If
    If quan > dqty Then
        Return False
    Else
        Return True

    End If
End Function

最佳答案

这是因为您无需读取即可直接访问数据,请尝试一下,

If sqlreader.HasRows Then
      If sqlreader.read()
        dqty = sqlreader("qty")
        sqlreader.Close()
       End If
Else
       sqlreader.Close()
End If

Reference

代码的已清理版本
Private Function checkquantity _
(ByVal code As String, ByVal quan As Integer) As Boolean

    try

    sqlcommand.CommandText = "select" _
    & "sum(qty) as qty from pos_stock_balance where item_code='" & code & "'"

    sqlcommand.Connection = AppsCon
    sqlreader = sqlcommand.ExecuteReader

    If sqlreader.read() Then
         dqty = sqlreader("qty")
    End If

    If quan > dqty Then
        Return False
    Else
        Return True
    End If

    Finally
       sqlreader.Close()
    End try

End Function

尽管我清理了您的代码,但是您的代码仍然容易受到sql injection的攻击。尝试使用参数化查询来避免这种情况

关于sql - 无效尝试读取数据,即使vb.net中的SqlDataReader中存在数据,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19976409/

10-13 05:54
查看更多