没有为'Nothing'定义Operator'='并输入'OleDbCommand'

时间:2013-07-06 06:50:18

标签: vb.net

需要你的帮助以进行以下编码,即时尝试在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

1 个答案:

答案 0 :(得分: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 injection attacks非常重要。即使这只是一个玩具项目,你也应该养成参数化SQL的习惯。
  • 我选择行的 count 而不是行本身。我们只需要知道是否有符合条件的有效用户。
  • 您不应该在UI线程中执行此操作(或任何其他数据库工作)。使用BackgroundWorker或异步方法。
  • 您应该从不以纯文本形式存储密码,因为您似乎在这里。我真的希望这是一个玩具应用程序,因为它目前非常不安全。再次尝试尽早养成良好的习惯。