Это будет выполнять операции с базой данных вне интерфейса пользователя и перемещать элементы интерфейса из операций базы данных. Он использует Async / Await
Private Async Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
If TextBox1.Text = "" Or TextBox2.Text = "" Then
MsgBox("Oops ¯\_(ツ)_/¯ " + Err.Description(), MsgBoxStyle.OkOnly, "Enter Value")
Else
Try
Await getDataSet(TextBox1.Text, TextBox2.Text)
Catch ex As Exception
'MsgBox("Oops " + Err.Description(), MsgBoxStyle.OkOnly, "Failed to Open")
'MsgBox("Incorrect login details", MsgBoxStyle.OkOnly)
System.Windows.Forms.MessageBox.Show(ex.Message)
End Try
If TextBox1.Text = "admin" Then
'If Access_Level = 0 Then
Me.Hide()
AdminMainMenu.Show()
Else
Me.Hide()
MainMenu.Show()
End If
End If
TextBox1.Clear()
TextBox2.Clear()
End Sub
Async Function getDataSet(username As String, password As String) As Task(Of DataSet)
Return Await Task.Factory.StartNew(
Function()
Dim connectionString = "server=localhost; userid=root; password=; database=partstest1; CharSet=utf8;"
Dim commandText = "SELECT ID, Username, Password FROM `user` WHERE `Username` = '" & username & "' and `Password` = '" & password & "';"
Using connDB = New MySqlConnection(connectionString), objCmd = New MySqlCommand(), objAdpt = New MySqlDataAdapter()
connDB.Open()
objCmd.Connection = connDB
objCmd.CommandText = commandText
objCmd.CommandType = CommandType.Text
objAdpt.SelectCommand = objCmd
Dim objDs = New DataSet()
objAdpt.Fill(objDs)
Console.WriteLine(objDs)
Return objDs
End Using
End Function)
End Function
Я не собираюсь рассматривать вашу потенциальную SQL проблему с инъекцией. Но вы можете обучить себя , если хотите.
Если ваше соединение с базой данных истекло, я думаю, вам нужно исправить строку соединения. Я не думаю, что кто-то может помочь вам с этим, не находясь на сайте.
Этот ответ поможет вашему приложению не зависать.
Ваше приложение страдает от несоблюдения Разделение проблем . Если этого не сделать, ваши долгосрочные задачи выполняются в пользовательском интерфейсе. Async / Await
- это способ снять часть обработки базы данных. Но вы также должны понимать, что на пользовательском интерфейсе должна выполняться нулевая обработка без пользовательского интерфейса. Имейте это в виду и найдите способы соблюдать (Async / Await
, BackgroundWorker
, System.Threading.Thread
)