mysql - 发生无效操作异常

标签 mysql vb.net winforms

我尝试访问 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/

相关文章:

vb.net - 为什么不能将 IView(Of SpecificViewModel) 转换为 IView(Of ViewModelBase)?

vb.net - 移动文件时表单卡住

Mysql二进制存储问题

mysql - 没有在 Mysql 参数中获取值

excel - 允许 VB.NET 应用程序将 Excel 文件转换为数据表

c# - 获取 NumericUpDown 的值会移动插入符位置,我可以停止吗?

c# - TreeView 文件夹结构有异常

Mysql插入查询以不同的顺序存储数据

php - 如果我在 mysql 中运行事件会发生什么?

vb.net - 如何使用 VB.net 在 Excel 中获取形状