如何检查mysql查询是否返回任何内容?

时间:2013-05-02 07:22:33

标签: asp.net mysql vb.net

我正在编写一个项目,在某些时候我必须检查数据库中是否有与id-textboxpassword-textbox的内容匹配的条目。但我不知道如何在我的后端代码(VB)中指出查询什么都不返回。

这是我正在使用的代码。但它不会以某种方式起作用。错误消息没有提示:

Try
    myconn.Open()
    Dim stquery As String = "SELECT * from accountstbl WHERE user_ID = " & IdNumb.Text
    Dim smd As MySqlCommand
    Dim myreader As MySqlDataReader
    smd = New MySqlCommand(stquery, myconn)
    myreader = smd.ExecuteReader()
    If myreader.Read() = True Then
        If myreader.Item("user_ID") = IdNumb.Text Then
            If myreader.Item("password") = CurrPass.Text Then
                'some code if the user input is valid
             Else
                errorPassID.Visible = True
             End If
        Else
           errorPassC.Visible = True
        End If
    End If
    myconn.Close()
Catch ex As Exception
    Dim ErrorMessage As String = "alert('" & ex.Message.ToString() & "');"
    Page.ClientScript.RegisterStartupScript(Me.GetType(), "ErrorAlert", ErrorMessage, True)   myconn.Close()
End Try

感谢任何帮助或建议。

1 个答案:

答案 0 :(得分:0)

我将尝试检查阅读器是否返回行,如果没有,则发出错误消息。 此外,不要使用字符串连接来构建查询,请始终使用参数化查询

        myconn.Open()
        Dim stquery As String = "SELECT * from accountstbl WHERE user_ID = @id"
        Dim smd = New MySqlCommand(stquery, myconn)
        smd.Parameters.AddWithValue("@id", Convert.ToInt32(IdNumb.Text))
        Dim myreader = smd.ExecuteReader()
        if Not myreader.HasRows Then
            Dim ErrorMessage As String = "alert('No user found');"
            Page.ClientScript.RegisterStartupScript(Me.GetType(), "ErrorAlert", ErrorMessage, True)
            myconn.Close()
            return
        else
            myreder.Read()
            ' no need to check if id is equal, you pass it as parameter to a where clause'
            If myreader.Item("password") = CurrPass.Text Then
                 'some code if the user input is valid '
            Else
                 errorPassID.Visible = True
                  ' or error message '
            End If
        End If
        myconn.Close()
    Catch ex As Exception
        Dim ErrorMessage As String = "alert('" & ex.Message.ToString() & "');"
        Page.ClientScript.RegisterStartupScript(Me.GetType(), "ErrorAlert", ErrorMessage, True)
        myconn.Close()
    End Try

另请注意,沿着网络传递明文密码是一个严重的安全漏洞。我希望你已经存储了密码的哈希并检查了它。

顺便问一下,为什么不在查询中传递密码哈希?像这样的事情:

  Dim stquery As String = "SELECT * from accountstbl WHERE user_ID = @id AND password = @pwd"

通过这种方式,如果您返回了记录,则验证用户并且您的客户端代码将很简单