Arnav Varshney Ответов: 1

Страница входа в visual studio 2017


Я создаю страницу входа в систему для своего программного обеспечения, но запрос на вход продолжает терпеть неудачу!

моя конструкция: Дизайн-Образ
моя база данных: Образ Базы Данных

Тем не менее, каждый раз, когда я выполняю программу, я получаю ошибку: Изображение Ошибки

Я получил этот код из этого видео на YouTube: Вход в систему Microsoft Access Visual Studio 2012 - 2015 VB.NET - YouTube

Что я уже пробовал:

My Code: <pre lang="vb">Public Class LoginForm
    Private Sub QuitButton_Click(sender As Object, e As EventArgs) Handles QuitButton.Click
        Me.Close()
    End Sub

    Private Sub SubmitButton_Click(sender As Object, e As EventArgs) Handles SubmitButton.Click
        Dim user As String
        Dim pass As String
        user = UserTextBox.Text
        pass = PassTextBox.Text
        If UsersTableAdapter.LoginQuery(user, pass) Then
            MsgBox("User Authenticated!")
        Else
            MsgBox("Invalid Credentials!")
        End If
    End Sub
End Class

мой запрос:
SELECT        Username, [Password]
FROM            Users
WHERE        (Username = ?) AND ([Password] = ?)

1 Ответов

Рейтинг:
9

OriginalGriff

:вздыхать:
YouTube ВИДЕО "как кодировать безопасность" ... примерно так же полезно, как чайник из папиросной бумаги.

Прекратите пытаться писать код с YouTube - совершенно ясно, что автор абсолютно не представляет, что он делает.

Никогда не храните пароли в открытом виде: это серьезная угроза безопасности. Всегда хэшируйте их и сравнивайте хэши. Хранение паролей: как это сделать.[^] объясняет - код написан на C#, но это довольно очевидная вещь.

Без вашего участия UsersTableAdapter.LoginQuery код мы не можем точно сказать, что там происходит, но ошибка подразумевает, что тот или иной из ваших параметров неверен - система пытается привести его к Boolean значение до того, как он передаст его в SQL.


Arnav Varshney

В UsersTableAdapter.LoginQuery-это тот, который я разместил как "мой запрос:" здесь!
И я всего лишь ребенок, создающий какую-то случайную программу, поэтому мне и в голову не пришло хэшировать эти пароли!

OriginalGriff

Нет, это не так. Это VB - код, который говорит SQL выполнить этот запрос, а не сам запрос!
Даже новичкам нужно с чего - то начинать-и гораздо, гораздо легче с самого начала приобрести хорошие привычки, чем пытаться сломать плохие, как только они установятся. Поэтому просмотр видео другими людьми, которые не знают, что они делают, не поможет вам в долгосрочной перспективе, это усложнит вашу жизнь.

Вместо этого возьмите книгу или лучше пройдите курс - они представляют материал в структурированном виде, чтобы вы не пропустили важные вещи (например, SQL-инъекцию, основы безопасности и т. д.), которые впоследствии могут значительно облегчить вашу жизнь.

Arnav Varshney

И все же, есть ли способ заставить его работать?

Richard Deeming

Просматривая видео, он возвращает дополнительную колонку в начале своего запроса - Customer_ID.

Похоже, что сгенерированный метод запроса просто возвращает значение первого столбца первой строки, возвращенной из запроса. В его случае, это анекдот. Integer; в вашем случае это String.

Тогда он полагается на неявное принуждение типа VB - чрезвычайно плохая вещь! - для преобразования Integer К Boolean: 0 будет преобразован в False, и все остальное превратится в True.

В вашем коде, потому что вы возвращаете a String, и он не содержит ни того, ни другого "True" или "False", его нельзя принудить к тому, чтобы Boolean, и вы получаете ошибку времени выполнения.

Быстрое и грязное исправление состоит в том, чтобы проверить, возвращает ли метод запроса Nothing:

If UsersTableAdapter.LoginQuery(user, pass) IsNot Nothing Then
    MsgBox("User Authenticated!")
Else
    MsgBox("Invalid Credentials!")
End If


Но, как сказал Грифф, автор этого видео явно не знает, что он делает, и не является хорошим источником для изучения. :)

(И вы всегда должны компилировать с помощью Option Strict включен, что дало бы вам ошибку времени компиляции вместо ошибки времени выполнения.)

Arnav Varshney

Большое спасибо!