gpt4 book ai didi

mysql - 如何在 VB 中使用 MySQL 数据库验证登录?

转载 作者:行者123 更新时间:2023-11-28 23:39:22 25 4
gpt4 key购买 nike

我有一个包含两个文本框和一个登录按钮的表单,用户名文本框名为 txtUsername,密码文本框名为 txtPasswd,按钮为 btnLogin。我已经在我的名为 accountinfo 的数据库中插入了一个用户名和密码,现在我想登录并显示一个特定的表单(如果用户成功登录,则为 frmProduct)如果他们的登录匹配我数据库中的任何登录,如果不匹配'匹配数据库中的任何登录名,显示一个消息框说“糟糕!数据库中不存在请求的用户名!”我坚持如何正确设置它,这是我到目前为止尝试过的方法。

Imports MySql.Data.MySqlClient

Public Class frmLogin


Private Sub frmLogin_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Dim ServerString As String = "Server=localhost:8080;User Id=root;Password=;Database=accountinfo"
Dim SQLConnection As MySqlConnection = New MySqlConnection
End Sub

Private Sub btnLogin_Click(sender As Object, e As EventArgs) Handles btnLogin.Click

Dim dbconnection As MySqlConnection

Dim cmd As MySqlCommand = New MySqlCommand
Dim reader As MySqlDataReader



dbconnection.Open()



cmd.CommandText = "SELECT Status FROM accountinfo WHERE UserName = ?UserName AND Password = ?Password"
cmd.Parameters.Add(New MySqlParameter("?UserName", txtUsername.Text))
cmd.Parameters.Add(New MySqlParameter("?Password", txtPasswd.Text))
cmd.Connection = dbconnection
reader = cmd.ExecuteReader
dbconnection.dispose()



If reader.HasRows() Then
MessageBox.Show("Login successful!", "Welcome")
frmProduct.Show()
Else
MessageBox.Show("Oops! Login unsuccessful!")
End If

End Sub
End Class

最佳答案

对于表单加载:

Private Sub frmLogin_Load(sender As Object, 
e As EventArgs) Handles MyBase.Load
' no code here.
' nothing interesting happens
End Sub

点击事件/登录:

Dim conStr = "Server=localhost:8080;User Id=root;Password=;Database=accountinfo"
Dim SQL = "SELECT `Status` FROM accountinfo WHERE UserName = @uname AND `Password` = @pword"

Dim frmP As New frmProduct

' this object will be closed and dispose @ End Using
Using dbCon As New MySqlConnection(conStr)
' the command object likewise
Using cmd As New MySqlCommand(SQL, dbCon)

dbCon.Open()
cmd.Parameters.Add(New MySqlParameter("@uname", txtUsername.Text))
cmd.Parameters.Add(New MySqlParameter("@pword", txtPasswd.Text))

' create a Using scope block for the reader
Using rdr As MySqlDataReader = cmd.ExecuteReader

If rdr.HasRows Then
MessageBox.Show("Login successful!", "Welcome")
frmP.Show()
Else
MessageBox.Show("Oops! Login unsuccessful!")
End If
End Using
End Using ' close/dispose command

End Using ' close/dispose connection

重要提示

不要将密码存储为纯文本。散列它们。

您应该为应用程序创建新帐户以用于连接到数据库。将万维网上的 admin/root 密码暴露给整个世界是个坏主意。

不要使用默认表单实例 如果表单类名为 frmProduct,请为其创建一个 New 实例以在应用程序中使用。表单只是类。它在每个顶部都这样说:

Public Class frmLogIn

因此使用它们来创建表单对象,如图所示。

范围
Dim/Private 声明变量及其类型。因此,Dim dbconnection As MySqlConnection 不会创建连接对象。它只是说“我想使用 MySql 连接,它将被命名为‘dbconnection’”。

哪里 Dim/Private/Public 行出现决定了范围 或该变量/对象存在的位置。当使用 dbconnection 在事件子内部声明时,该对象仅存在于那里。

要创建表单/类级别的变量,请在表单级别声明它们:

Public Class Form1
Private SomethingINeedLater As String

SomethingINeedLater 将在表单的任何位置可用。

这样的代码:

Dim frmP As New frmProduct

两者:Dim 声明对象变量,New 创建该类的实例。

在 VB 中,几乎所有导致缩进的内容都会创建一个新的 block 作用域。因此,您在 Using/End Using block 中声明的任何内容(例如 Dim foo As String = "Ziggy")都将仅存在于此。这就是为什么我在代码使用它之前就声明了 frmProduct

最后,“Status”和“Password”都是reserved words for MySql和所有/几乎所有数据库,所以我在 SQL 中将其转义。避免使用保留字的列和表,以免对它们进行转义。

关于mysql - 如何在 VB 中使用 MySQL 数据库验证登录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34842292/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com