VB. net и Mysql Проблема входа в систему с использованием двух таблиц - PullRequest
0 голосов
/ 14 марта 2020

Как я могу войти, используя уровень доктора в его таблице. Потому что каждый раз, когда я регистрирую, форма регистратора всегда появляется, даже когда я регистрируюсь, используя пользователя и пароль доктора, возможно, мой синтаксис неправильный, пожалуйста, помогите мне PS: Формы врачей и администраторы Формы разные.

Это мой код:

Try
    mycon.Open()
    Dim query1 As String
    Dim query2 As String
    Dim name As String
    query1 = "SELECT * FROM receptionisttbl"
    command = New MySqlCommand(query1, mycon)
    reader = command.ExecuteReader

    With reader
        .Read()

        If .Item("level") = "1" Then
            With reader
                .Read()
                name = .Item("name")
            End With
            MsgBox("Welcome " + name)
            Form1.Show()

            command.Dispose()
            reader.Close()
            mycon.Close()
        Else
            mycon.Open()
            query2 = "SELECT * FROM doctortbl"
            command = New MySqlCommand(query2, mycon)
            reader = command.ExecuteReader

            With reader
                .Read()

                If .Item("level") = "2" Then
                    With reader
                        .Read()
                        name = .Item("name")
                    End With
                    MsgBox("Welcome " + name)
                    Form2.Show()

                    command.Dispose()
                    reader.Close()
                    mycon.Close()

                End If
            End With

        End If
    End With

Catch ex As Exception
    MsgBox(ex.ToString)
Finally
    mycon.Dispose()
End Try

1 Ответ

0 голосов
/ 16 марта 2020

Во-первых, давайте рассмотрим ваши требования.

  1. Укажите форму входа для проверки пользователей.

  2. Если пользователь действителен (userName и соответствующий пароль находятся в базе данных), а затем отобразить форму на основе уровня пользователя.

С учетом требований взглянуть на дизайн таблицы в базе данных. Давайте назовем это MDUsers. Теперь к столбцам.

UserName as an VarChar size 100 and Primary key of the table
UserPassword as VarChar size 100
Level an Integer

Теперь у вас есть поля для всех данных, необходимых для ваших потребностей.

Добавьте некоторые примеры данных в вашу таблицу.

Дальше подумайте о том, что вам нужно от пользователя для выполнения sh ваших требований. Создайте свой пользовательский интерфейс соответственно. Ваша форма входа в систему будет иметь 2 текстовых поля (имя пользователя и пароль) и кнопку (Логин).

Затем вам нужно подумать о коде кнопки входа в систему. Вам необходимо подключиться к базе данных и проверить, совпадают ли имя пользователя и пароль. Как только вы найдете соответствие, вам нужно всего лишь получить один фрагмент данных, чтобы выполнить ваши требования, уровень.

Теперь, как мы можем попросить базу данных сделать все это?

Select level From MDUsers Where userName = @userName And UserPassword = @pword;

Поскольку userName является первичным ключом таблицы, мы знаем, что найдем не более одной записи с этим userName. Если пароль совпадает, то у нас есть действительный пользователь, и мы вернем один фрагмент данных, уровень для этой записи.

Using...End Using блоки гарантируют, что ваши объекты базы данных будут закрыты и удалены, даже если есть ошибка. Вы можете передать строку соединения непосредственно в конструктор соединения и передать строку запроса и соединение в конструктор команды.

Всегда использовать параметры.

С нам нужен только один фрагмент данных, который мы можем использовать .ExecuteScalar

Private Sub OpCode()
    Dim retVal As Object
    Using cn As New MySqlConnection("Your connection string"),
            cmd As New MySqlCommand("Select level From MDUsers Where userName = @userName And UserPassword = @pword;", cn)
        cmd.Parameters.Add("@userName", MySqlDbType.VarChar, 100).Value = txtName.Text
        cmd.Parameters.Add("@pword", MySqlDbType.VarChar, 100).Value = txtPassword.Text
        cn.Open()
        retVal = cmd.ExecuteScalar
    End Using
    If retVal Is Nothing Then
        MessageBox.Show("Login failed")
        Return
    End If
    If CInt(retVal) = 1 Then
        Form1.Show()
    ElseIf CInt(retVal) = 2 Then
        Form2.Show()
    Else
        MessageBox.Show("Level not recognized")
    End If
End Sub

Вам нужно будет проверить MySql правила для имен столбцов и имен таблиц, зная о зарезервированных словах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...