Проверьте, существует ли запись

0

Я создаю программу в VB.NET, где, прежде чем создавать пользователя, я хочу проверить, что если эта запись уже существует.

Вот мой код:

Imports MySql.Data.MySqlClient
Public Class WindowsAdvancedStudyStartingForms
    Dim FirstName As String = ""
    Dim SecondName As String = ""
    Dim FullName As String = ""
    Dim StudentClassReal As String = ""
    Dim StudentClassValue As String = ""
    Dim Address As String = ""
    Dim Username As String = ""
    Dim Password As String = ""
    Dim SuccessfulMessage As Integer = 0
    'MySql
    Dim ServerString As String = "Server=myServer;User ID=myID;Passwordmy=Password;Database=myDatabase;SSLMode=None"
    Dim SQLConnection As MySqlConnection = New MySqlConnection
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        FirstName = AFirstNameTextBox.Text
        SecondName = ASecondNameTextBox.Text
        FullName = FirstName + " " + SecondName
        StudentClassValue = ASelectClassComboBox.SelectedItem
        Address = AAddressTextBox.Text
        Username = AUsernameTextBox.Text
        Password = APasswordTextBox.Text

        If StudentClassValue = "Class IX" Then
            StudentClassReal = 9
        Else
            MessageBox.Show("You have selected a Wrong Class", "Wrong Class", MessageBoxButtons.OK, MessageBoxIcon.Error)
        End If
        If FirstName = "" And FirstName.Count = 1 Then
            MessageBox.Show("You didn't enter your First Name", "First Name", MessageBoxButtons.OK, MessageBoxIcon.Error)
        Else
            'Nothing
        End If

        If SecondName = "" Then
            MessageBox.Show("You didn't enter your Second Name", "Second Name", MessageBoxButtons.OK, MessageBoxIcon.Error)
        Else
            'Nothing
        End If

        If Address = "" Then
            MessageBox.Show("You didn't enter your Address", "Address", MessageBoxButtons.OK, MessageBoxIcon.Error)
        Else
            'Nothing
        End If

        If Username = "" Then
            MessageBox.Show("You didn't enter your Username", "Username", MessageBoxButtons.OK, MessageBoxIcon.Error)
        Else
            'Nothing
        End If

        If Password = "" Then
            MessageBox.Show("You didn't enter your Password", "Password", MessageBoxButtons.OK, MessageBoxIcon.Error)
        Else
            'Nothing
        End If

        If StudentClassReal = "9" Then
            Dim StudentInformationVerification As Integer = MessageBox.Show("Are you sure that these are your information?" & vbCrLf & "I am " + FullName + ", and I study at Class " + StudentClassReal + ". I live in " + Address + ". My Advanced Windows Study Username is " + Username + ", and my password is " + Password, "Information Verification", MessageBoxButtons.YesNo, MessageBoxIcon.Question)

            If StudentInformationVerification = DialogResult.Yes Then
                Dim SQLStatement As String = "INSERT INTO people(FirstName, SecondName, Class, Address, Username, Password) VALUES('" & FirstName & "','" & SecondName & "', '" & StudentClassReal & "', '" & Address & "', '" & Username & "', '" & Password & "')"
                SaveName(SQLStatement)
                    My.Computer.Registry.LocalMachine.SetValue("Study", "1")
                    SuccessfulMessage = 1
                    Me.Close()
                End If

                If StudentInformationVerification = DialogResult.No Then

            End If
        Else
            'Nothing

        End If
    End Sub

    'MYSQL Connection
    Private Sub WindowsAdvancedStudyStartingForms_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        Dim RegistryCheck As String = My.Computer.Registry.LocalMachine.GetValue("Study")
        If RegistryCheck = 1 Then
            LoginForm1.Show()
            Me.Close()
        End If
        APasswordTextBox.UseSystemPasswordChar = True
SQLConnection:

        SQLConnection.ConnectionString = ServerString

        Try
            If SQLConnection.State = ConnectionState.Closed Then
                SQLConnection.Open()
                If SuccessfulMessage = 0 Then
                    MessageBox.Show("Connected to Windows Advanced Study Database", "Connection to Database Passed", MessageBoxButtons.OK, MessageBoxIcon.Information)
                End If
            Else
                SQLConnection.Close()
                MessageBox.Show("Could not Connect to Windows Advanced Study Database", "Connection to Database Failed", MessageBoxButtons.RetryCancel, MessageBoxIcon.Error)
                If DialogResult.Retry Then
                    GoTo SqlConnection
                End If

                If DialogResult.Cancel Then
                    Close()
                End If
            End If
        Catch ex As Exception
            MsgBox(ex.ToString)
        End Try
    End Sub

    Public Sub SaveName(ByRef SQLStatement As String)
        Dim cmd As MySqlCommand = New MySqlCommand

        With cmd
            .CommandText = SQLStatement
            .CommandType = CommandType.Text
            .Connection = SQLConnection
            .ExecuteNonQuery()
        End With
        MessageBox.Show("Welcome to Advanced Windows Studying", "Authentication Successful", MessageBoxButtons.OK, MessageBoxIcon.Information)
    End Sub
End Class
  • 0
    Не размещайте ссылки на код, поместите его в свой пост, пожалуйста. Также I want to check that if that record already exists. не объясняет вашу проблему о том, что не так, а что не работает
  • 0
    Я попытался использовать обычный редактор кода для stackoverflow, но это не сработало. Вот почему я разместил ссылку в Github
Теги:
software-design

1 ответ

-1
Лучший ответ

Используйте параметры. Включите опцию Strict. Вам не понадобятся все те Dim для информации о студенте. Вы можете передать строку соединения в конструктор MySQLConnection. Переместите код проверки на событие Validat различных элементов управления. Посмотрите, как отменить событие, чтобы фокусировка оставалась на соответствующем элементе управления. Вы можете передать свою строку SQL и подключение напрямую к конструктору соединения. Использование... Операторы EndUsing гарантируют, что объекты будут закрыты и расположены правильно, даже если есть ошибка. Это очень важно для обеспечения закрытия соединений. Не используйте GoTo. Это только в языке для обратной совместимости и не должно использоваться в новом коде. (приводит к коду спагетти). В реальном приложении пароли никогда не будут храниться как обычный текст, но это тема для другого дня. В ваших операторах SQL вам нужно окружить и зарезервировать слова MySQL с тиками обратной ссылки ('). Это символ ниже тильды (~) и является котируемым идентификатором для MySQL. На самом деле, это не помешает разрешить всем именам таблиц и именам столбцов, чтобы тик на обратную сторону был безопасным. Я не могу проверить этот код, потому что у меня нет вашей базы данных.

Imports MySql.Data.MySqlClient
Public Class MySQLStudent
    Dim strConnection As String = "Server=myServer;User ID=myID;Passwordmy=Password;Database=myDatabase;SSLMode=None"
    Private Sub RegisterStudent()
        Using cn As New MySqlConnection(strConnection)
            Dim SQLStatement As String = "Select Count(*) From people where Username = @UserName;"
            Using cmdV As New MySqlCommand(SQLStatement, cn)
                cn.Open()
                Dim rowCount As Integer = CInt(cmdV.ExecuteScalar())
                cn.Close()
                If rowCount > 0 Then
                    MessageBox.Show("Sorry that username is in use; please enter another one.")
                    AUsernameTextBox.Focus
                    Exit Sub
                End If
            End Using
            SQLStatement = "INSERT INTO people(FirstName, SecondName, 'Class', Address, 'Username', 'Password') VALUES(@FirstName, @SecondName', @StudentClassValue, @Address, @UserName, @Password);"
            Using cmd As New MySqlCommand(SQLStatement, cn)
                cmd.Parameters.Add("@FirstName", MySqlDbType.String).Value = AFirstNameTextBox.Text
                cmd.Parameters.Add("@SecondName", MySqlDbType.String).Value = ASecondNameTextBox.Text
                cmd.Parameters.Add("@StudentClassValue", MySqlDbType.String).Value = ASelectClassComboBox.SelectedItem
                cmd.Parameters.Add("@Address", MySqlDbType.String).Value = AAddressTextBox.Text
                cmd.Parameters.Add("@Username", MySqlDbType.String).Value = AUsernameTextBox.Text
                cmd.Parameters.Add("@Password", MySqlDbType.String).Value = APasswordTextBox.Text
                cn.Open()
                With cmd
                    .CommandType = CommandType.Text
                    .ExecuteNonQuery()
                End With
            End Using
        End Using
        MessageBox.Show("Welcome to Advanced Windows Studying", "Registration Successful", MessageBoxButtons.OK, MessageBoxIcon.Information)
    End Sub
    Private Sub LogInStudent()
        Using cn As New MySqlConnection(strConnection)
            Using cmd As New MySqlCommand("Select Count(*) From people Where 'Username' = @UserName And 'Password' = @Password;", cn)
                cmd.Parameters.Add("@UserName", MySqlDbType.String).Value = AUsernameTextBox.Text
                cmd.Parameters.Add("@Password", MySqlDbType.String).Value = APasswordTextBox.Text
                cn.Open()
                Dim rowCount As Integer = CInt(cmd.ExecuteScalar)
                cn.Close()
                If rowCount <> 1 Then
                    MessageBox.Show("Sorry, invalid login.")
                    Exit Sub
                End If
                MessageBox.Show("Successful login.")
                'Show the next form of the application
            End Using
        End Using
    End Sub
End Class
  • 0
    Спасибо, я обязательно проверю, работает ли это.
  • 0
    Можете ли вы подтвердить, что это работает на localhost?
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню