我尝试访问 MySql 数据库但收到此错误:
Exception thrown: 'System.InvalidOperationException' in MySql.Data.dll
Additional information: The CommandText property has not been properly initialized.
这将是我的代码
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
最佳答案
正如错误所示,您从未设置 MySqlCommand
对象的 CommandText
属性。您已经定义了 SELECT
查询,但从未在任何地方使用它。在尝试使用该对象之前将其设置在命令对象上:
mycommand.CommandText = sqlquery
<小时/>
注意:请注意,您的代码对 SQL 注入(inject)攻击完全开放。您应该使用查询参数,而不是直接将用户输入作为代码执行。基本上,您允许用户在您的数据库上执行他们想要的任何代码。
另外:您正在以纯文本形式存储用户密码。这是对您的用户极不负责任的行为。如果您可以读取他们的密码,那么攻击者也可以读取。用户密码应使用单向哈希进行隐藏,以便它们永远不会被读取,即使您作为系统所有者也无法读取。
关于mysql - 发生无效操作异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34561800/