1

下面的编码需要你的帮助,我试图在 vb.net 上创建登录表单,但系统显示错误 “没有为 'Nothing' 定义运算符'='并键入'OleDbCommand'。”

下面是我的编码

enter code here


    Dim MyOledbCommand As OleDbCommand = New OleDbCommand()

    If MyCommand = New OleDbCommand("SELECT * FROM Login WHERE username = '" & txtuser.Text & "' and password ='" & _
                                 txtpass.Text & "'", OleDbConn) Then
        MsgBox("Login Success")
        Form1.Show()
    Else
        MsgBox("Login Failed")

    End If
4

1 回答 1

2

创建一个新OleDbCommand的实际上根本不会执行它,也不是一个If语句的有效条件。我怀疑你想要类似的东西:

Dim sql = "SELECT COUNT(*) FROM Login WHERE username = ? and password = ?"
Dim count As Integer
Using command As OleDbCommand = New OleDbCommand(sql, OleDbConn)
    command.Parameters.Add("@User", OleDbType.VarChar).Value = txtuser.Text
    command.Parameters.Add("@Password", OleDbType.VarChar).Value = txtpass.Text
    count = CInt(command.ExecuteScalar())
End Using

If count > 0 Then
    MsgBox("Login Success")
    Form1.Show()
Else
    MsgBox("Login Failed")

确切的语法可能略有不同(我不是 VB 程序员),但它的要点应该没问题。笔记:

  • 我正在使用一个Using语句,以便在块的末尾自动处理命令。你应该为你的连接做同样的事情......如果你试图为整个程序保持相同的连接打开,你不应该。让连接池管理它。
  • 我正在使用参数化 SQL,而不是将值直接放入 SQL 中。这对于避免SQL 注入攻击很重要。即使这只是一个玩具项目,您也应该立即养成参数化 SQL 的习惯。
  • 我正在选择行而不是行本身。我们只需要知道是否有任何符合条件的有效用户。
  • 您不应该在 UI 线程中执行此操作(或任何其他数据库工作)。使用 aBackgroundWorker或异步方法。
  • 永远不应以明文形式存储密码,因为您似乎在这里。我真的希望这是一个玩具应用程序,因为它目前非常不安全。再次,尝试尽早养成良好的习惯。
于 2013-07-06T07:01:03.797 回答