为此我正在使用 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
下课
我现在想访问数据库。速查
最佳答案
您错过了关键步骤。您没有向适配器分配任何命令。它不知道如何在没有命令的情况下查询任何内容
Dim adapter As New MySqlDataAdapter(cmd)
接下来,根据MySql Reserved KeyWords , 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 和数据表
Dim reader = cmd.ExecuteReader()
if reader.HasRows then
MessageBox.Show("Login Success!")
Else
MessageBox.Show("Invalid Username or Password")
End If
第三,将密码以明文形式保存在数据库中然后使用查询来检索它是一个很大的安全风险。你应该使用 Salt and Hashing存储和检索密码的方法
关于MySql - System.Data.dll 中发生类型为 'System.InvalidOperationException' 的未处理异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48239173/