mysql-system.data.dll中发生类型为“system.invalidoperationexception”的未处理异常

k97glaaz  于 2021-06-25  发布在  Mysql
关注(0)|答案(1)|浏览(381)

我使用mysql数据库…我得到以下错误…请任何人都可以帮助我?

Imports System.Data
Imports MySql.Data Imports MySql.Data.MySqlClient
Public Class formLogin
  Dim connStr As String = "server=localhost;user=root;database=ssknet;port=3306;password=;"
  Dim connection As New MySqlConnection(connStr)

Private Sub btnLogin_Click(sender As Object, e As EventArgs) Handles btnLogin.Click
    connection.Open()
    Dim cmd As New MySqlCommand("SELECT * FROM user WHERE username=@username and password=@password", connection)

    cmd.Parameters.Add("@username", MySqlDbType.VarChar).Value = txtUsername.Text
    cmd.Parameters.Add("@password", MySqlDbType.VarChar).Value = txtPassword.Text

    Dim adapter As New MySqlDataAdapter
    Dim table As New DataTable

    adapter.Fill(table)

    If table.Rows.Count <= 0 Then
        MessageBox.Show("Invalid Username or Password")
    Else
        MessageBox.Show("Login Success!")
    End If

    'cmd.ExecuteNonQuery()
    connection.Close()
End Sub

结束类
我现在想访问数据库。快速恢复

uinbv5nw

uinbv5nw1#

你错过了关键的一步。您没有向适配器分配任何命令。它不知道如何在没有命令的情况下查询任何东西

Dim adapter As New MySqlDataAdapter(cmd)

接下来,根据mysql保留关键字,user和password是保留的,要在查询中将它们用作字段名,应该在它们周围加上反勾号(alt+096)。所以查询应该写成

Dim cmd As New MySqlCommand("SELECT * FROM `user` 
                            WHERE username=@username 
                            AND `password`=@password", connection)

从这方面来说,你的代码是足够好的,尽管有两件事要考虑。
首先,连接对象不应保持为全局对象。这会导致服务器上保留的资源出现许多问题,并在出现错误时关闭/打开连接。只需在using语句中创建并丢弃连接

Private Sub btnLogin_Click(sender As Object, e As EventArgs) Handles btnLogin.Click
Using connection = New MySqlConnection(connStr)
   connection.Open()

   .... all of your code except the close connection

End Using ' this close the connection also in case of exceptions

其次,如果只想检查用户/密码是否存在,则不需要sqldataadapter和datatable

Dim reader = cmd.ExecuteReader()
if reader.HasRows then
    MessageBox.Show("Login Success!")
Else
    MessageBox.Show("Invalid Username or Password")
End If

第三,在数据库中以明文形式保存密码,然后使用查询检索密码,这是一个很大的安全风险。您应该使用salt和散列方法来存储和检索密码

相关问题