我正在尝试访问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
答案 0 :(得分:0)
就像错误所说的那样,你永远不会设置CommandText
对象的MySqlCommand
属性。您已经定义了SELECT
查询,但从不在任何地方使用它。在尝试使用该对象之前,将其设置在命令对象上:
mycommand.CommandText = sqlquery
注意:请注意,您的代码全开到 SQL注入攻击。您应该使用查询参数而不是直接执行用户输入作为代码。基本上,您允许用户在数据库上执行他们想要的任何代码。
另外:您正在纯文本中存储用户密码。这对您的用户 严重不负责任 。如果您可以读取密码,攻击者也可以。用户密码应该使用单向哈希模糊,以便永远不会读取,甚至不能作为系统所有者阅读。