发生InvalidOperationException

时间:2016-01-02 01:43:59

标签: mysql vb.net winforms

我正在尝试访问MySql数据库,但收到此错误:

  

抛出异常:MySql.Data.dll中的'System.InvalidOperationException'

     

其他信息:CommandText属性尚未正确初始化。

这将是我的代码

Imports MySql.Data.MySqlClient

Public Class Login
   Dim cn As New MySqlConnection

   Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
      cn.ConnectionString = "server=localhost; userid=root; password=root; database=pos"
      cn.Open()
      MsgBox("Connected")
   End Sub

   Private Sub btnLogin_Click(sender As Object, e As EventArgs) Handles btnLogin.Click
      cn.Close()
      Dim myadapter As New MySqlDataAdapter
      Dim sqlquery = "SELECT * from pos.values where username='" & txtUsername.Text & "' AND password='" & txtPassword.Text & "'"
      Dim mycommand As New MySqlCommand
      mycommand.Connection = cn
      cn.Open()
      myadapter.SelectCommand = mycommand
      Dim mydata As MySqlDataReader
      mydata = mycommand.ExecuteReader
      If mydata.HasRows = 0 Then
         Beep()
         MsgBox(txtUsername.Text & " Invalid")
      Else
         MsgBox("Welcome " & txtUsername.Text)
         MainWindow.Show()
         Me.Hide()
         cn.Close()
      End If
   End Sub
End Class

1 个答案:

答案 0 :(得分:0)

就像错误所说的那样,你永远不会设置CommandText对象的MySqlCommand属性。您已经定义了SELECT查询,但从不在任何地方使用它。在尝试使用该对象之前,将其设置在命令对象上:

mycommand.CommandText = sqlquery

注意:请注意,您的代码全开 SQL注入攻击。您应该使用查询参数而不是直接执行用户输入作为代码。基本上,您允许用户在数据库上执行他们想要的任何代码。

另外:您正在纯文本中存储用户密码。这对您的用户 严重不负责任 。如果您可以读取密码,攻击者也可以。用户密码应该使用单向哈希模糊,以便永远不会读取,甚至不能作为系统所有者阅读。